设为首页 收藏本站
查看: 1444|回复: 0

[经验分享] python的流程控制

[复制链接]

尚未签到

发表于 2018-8-15 09:32:24 | 显示全部楼层 |阅读模式
  一、比较操作
  对于python语言,所有的对象都支持比较操作,比较操作可用于测试相等性、相对大小等。如果是符合对象(如:元组、列表),python会检查其所有部分,包括自动遍历各级嵌套对象、直到可以得到最终结果。测试操作符只要有'=='与'is'。
  '=='操作符测试值的相等性
  'is'表达式测试对象的一致性
  组合条件测试: and与运算;or或运算;not非运算
In [1]: a= 123  
In [2]: b=123
  
In [3]: a==b            #测试a与b的值是否相等
  
Out[3]: True
  
In [10]: type(a)is int  #测试a的类型是否为int
  
Out[10]: True
  在python中真与假的表示主要有以下几种方式:
  1、任何非0数字和非空对象都是为真
  2、数字0、空对象和特殊对象None均为假
  3、逻辑判断的返回值为True或者False
  二、选择与循环表达式

  •   if语句
if boolean_expression1:  
  suite1
  
elif boolean_expression2:
  
...
  
else:
  
  else_suite
  
elif语句可选,当仅用于占位符,而不写相关语句时可以使用pass

  •   三元表达式
A = X if Y else Z    等价于  expression1 if bool_expression else expression2  
if Y:
  
  A=X
  
else:
  
  A=Z

  •   while循环
while bool_expression:  
  while_suite
  
else:
  
  else_suite

  •   for循环
for expression1 in iterable:  
  for_suite
  
else:
  
  else_suite
  循环的控制方法:
  break:跳出最内层循环
  continue:跳出所处的最近层循环的开始处
  else代码块:循环正常终止才会执行,若循环终止是由break跳出导致的,则else不会执行
a=[1,2,3,4,5,6,7]  
for i in a:
  
    if i==3:
  
        continue    #跳出本次循环,直接往后执行遍历
  
    print(i)
  
else:                      #else语句在循环结束后得到执行
  
    print(a)
  
1
  
2
  
4
  
5
  
6
  
7
  
[1, 2, 3, 4, 5, 6, 7]
  

  
a=[1,2,3,4,5,6,7]
  
for i in a:
  
    if i==3:
  
        break              #break跳出循环,不再执行之后的遍历
  
    print(i)
  
else:                      #else语句没有执行
  
    print(a)
  
1
  
2
  三、迭代器和列表解析

  •   迭代,使用iter()函数可以创建迭代器,使用__next__()函数可以对迭代器逐个取值。
  迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不能后退。另外,迭代器多的一个优点是不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素不存在或者销毁。
  特点:
  访问者不需要关心迭代器内部的结构,仅需要通过next()方法不断取下一个内容
  不能随机访问集合中的某个值,只能从头到尾依次访问
  访问到一半时不能往后退
  便于循环比较大的数据集合,节省内存
DSC0000.png

  列表解析:python迭代机制中的一种应用,它常用于实现创建新的列表,因此置于[]中。
语法:[expr for iter_var in iterable if cond_expr]  
In [1]: range(22,101,2)    #22到101的偶数
  
In [5]: [ x for x in range(1,101) if x%2==0 and x>=20 ]   #与range(22,101,2)等价
  
In [6]: L = [ x**2 for x in range(9)]   #1到9 的平方值
  
In [7]: list(L)
  
Out[7]: [0, 1, 4, 9, 16, 25, 36, 49, 64]
  range()与xrange()的对比:
  range()函数一次性返回连续的整数列表;xrange()函数一次性产生一个数据,相较于range更加节约空间。在python3.x中xrange()函数已经被移除。
>>> l = range(9)  
>>> l
  
[0, 1, 2, 3, 4, 5, 6, 7, 8]
  
>>> L=xrange(9)
  
>>> L
  
xrange(9)
  
>>> list(L)
  
[0, 1, 2, 3, 4, 5, 6, 7, 8]

  •   生成器,在python中生成器主要有两种:生成器函数与生成器表达式。
  生成器函数:一个函数调用时返回一个迭代器,那么这个函数就叫做生成器(generator),如果这个函数中包含yield语法,那么这个函数就会变成生成器;yield的主要作用就是可以使函数中断并保存中断状态;中断后,代码可以继续往下执行,过一段时间后,还可以再重新调用这个函数,从上次yield的下一句开始执行。
def my_range(first=0,last=10,step=1):  
    number =first
  
    while number <last:
  
        yield number     #yield生成器,当number<last时,生成number返回输出
  
        number +=step
  
ranger=my_range(1, 6)        #ranger为生成器对象
  
for x in ranger:
  
    print(x)                      #输出从yiled得到的值后,继续返回函数执行
  
1
  
2
  
3
  
4
  
5
  生成器表达式:类似于列表推导式,但生成器返回按需产生一个对象,不是一次构建一个结果列表。要创建一个生成器表达式很简单,只要把列表生成式的[]改成(),就可以创建一个生成器表达式,通过next()函数可以获得生成器表达式的下一个返回值。但是,当遍历到最后一个元素,没有元素时会抛出异常,因此一般用for循环迭代它。
In [14]: squ=(x**2 for x in range(4))  
In [15]: squ
  
Out[15]: <generator object <genexpr> at 0x7fb403bc98e0>
  
In [16]: next(squ)
  
Out[16]: 0
  
In [17]: next(squ)
  
Out[17]: 1
  
In [18]: next(squ)
  
Out[18]: 4
  
In [19]: next(squ)
  
Out[19]: 9
  
In [26]: next(squ)
  
---------------------------------------------------------------------------
  
StopIteration                             Traceback (most recent call last)
  
<ipython-input-26-10dd268618a2> in <module>()
  
----> 1 next(squ)
  
StopIteration:
  四、装饰器
  在写代码的时候,要遵循开放封闭的原则,虽然这个原则是用在面向对象开发,但是也适用于函数式编程,它规定已经实现的功能代码不允许被修改,但可以扩展。即:
  封闭:已实现的功能代码快
  开放:对外扩展开发
  所谓装饰器其本身是一个函数,用于装饰其他函数,功能是增强被装饰的功能。
#函数document_it()定义了一个装饰器,其功能为:  
#打印输出函数的名字和参数的值
  
#打印含有参数的函数
  
#打印输出结果
  
#返回修改后的函数
  

  
def document_it(func):
  
    def new_function(*args,**kwargs):
  
        print('running function:',func.__name__)
  
        print('positionnal argument:',args)
  
        print('keyword arguments:',kwargs)
  
        result=func(*args,**kwargs)
  
        print('result:',result)
  
        return result
  
    return new_function
  
#无论document_it()的函数func是什么,装饰器都会返回一个新的函数。其中包括函数增加的额外语句。装饰器并不需要执行函数func中的代码,只是在结束前函数document_it()调用函数func的返回结果和附加的代码结果。
  对于装饰器的使用主要有两种方法:
def add_ints(a,b):      #定义函数,求两个数的和  
    return a+b
  
c=add_ints(3,5)
  
print(c)
  

  
cooler_add_ints=document_it(add_ints)   #第一种方法:人工对装饰器赋值
  
c=cooler_add_ints(3,5)
  
print(c)
  
输出结果:
  
running function: add_ints
  
positionnal argument: (3, 5)
  
keyword arguments: {}
  
result: 8
  
8
  

  
@document_it                            #第二种方法:直接在要装饰的函数前面添加装饰器名字
  
def add_ints(a,b):
  
    return a+b
  
c=add_ints(3, 5)
  
print(c)
  
输出结果:
  
running function: add_ints
  
positionnal argument: (3, 5)
  
keyword arguments: {}
  
result: 8
  
8
  五、枚举和递归

  •   枚举
  range可以在非完备遍历中用于生成索引,而非偏移处的元素;如果同时需要便宜出的索引和元素时,可以使用enumerate()函数,此内置韩寒苏返回一个生成器对象。
In [3]: for i in range(5):     #只生成元素的值  
   ...:     print(i)
  
   ...:
  
0
  
1
  
2
  
3
  
4
  

  
In [4]: for index,i in enumerate(range(5)):   #同时生成索引和元素
  
   ...:     print(index,i)
  
   ...:
  
0 0
  
1 1
  
2 2
  
3 3
  
4 4
  

  
In [7]: for index,i in enumerate(a):    #遍历列表时,生成索引和元素
  
   ...:     print(index,i)
  
   ...:
  
0 1
  
1 2
  
2 5
  
3 67
  
4 3
  
5 54
  
6 756
  
7 8
  
8 9
  
9 35

  •   递归:递归算法是一种直接或者间接调用自身算法的过程
  特点:递归算法就是在过程或者函数里调用自身。在使用递归策略时,必须要有一个明确的递归结束条件,称为递归出口;递归算法解题通常显得很简洁,但是其运行效率较低,在递归调用的过程中系统为每一层的返回点、局部变量开辟了栈来存储。递归次数过多容易造成栈溢出等。
#用递归算法求n!  
def factorial(n):
  
    if n==1 or n==0:
  
        return 1
  
    else :
  
        return n*factorial(n-1)
  
a=factorial(8)
  
print(a)
  
输出结果:
  
40320

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552011-1-1.html 上篇帖子: Python学习记录day8-ygqygq2 下篇帖子: python如何在前端显示后端的信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表