python基础(四)流程控制
流程控制在任何编程语言里都是一个比较重要的部分,同其他语言一样,python下常用的流程控制语句有if……elif……else、while、for、break、continue,也有其他语言可能没有的语句 如try、with、pass、del、exec、eval 等。本篇就结合示例做一个简单的总结。
注:流程控制和编程语句区分上并不是特别明显,具体可以查看维基百科上python的定义 ,其将流程控制也划到了语句的范畴(从这里看 语句 > 流程控制,并包含流程控制)。所以本篇主要做流程控制的总结,并顺带做其他相关语句的小结。
一、if 语句
if 语句是python 中使用频率最多的流程控制语句之一 ,由于python 中没有switch……case 语句,所以在python 中要使用if 语句来实现。其流程为: if … elif … elif …else ,这里可以用0或多个 elif分支,关键字elif 是 else if的缩写 ,而else 关键字可选 。示例:
1>>> x = int(input("Please enter an integer: "))
2Please enter an integer: 42
3>>> if x < 0:
4... x = 0
5... print('Negative changed to zero')
6... elif x == 0:
7... print('Zero')
8... elif x == 1:
9... print('Single')
10... else:
11... print('More')
12...
注:这里每个控制关键字一行结尾处都有一个” : ” 号,每层关键字控制后有严格的缩进表示。其用于代替其他语言中的大括号的作用。
二、for 语句
Python 中的 for 语句与你在 C 或是 Pascal 中使用的略有不同. 不同于在 Pascal 中总是依据一个等差的数值序列迭代, 也不同于在 C 中允许用户同时定义迭代步骤和终止条件, Python 中的 for 语句在任意序列 (列表或者字符串) 中迭代时, 总是按照元素在序列中的出现顺序依次迭代。示例:
1>>> # Measure some strings:
2... words = ['cat', 'window', 'defenestrate']
3>>> for x in words:
4... print(x, len(x))
5...
6cat 3
7window 6
8defenestrate 12
在迭代过程中修改迭代序列不安全(只有在使用链表这样的可变序列时才会有这样的情况)。如果你想要修改你迭代的序列(例如,复制选择项),你可以迭代它的复本。使用切割标识就可以很方便的做到这一点:
1>>> for w in words[:]: # Loop over a slice copy of the entire list.
2... if len(w) > 6:
3... words.insert(0, w)
4...
5>>> words
6['defenestrate', 'cat', 'window', 'defenestrate']
需要特别注意的是,for也可以和else进行组合进行循环,如下:
1for x in range(1,5):
2 if x == 6 :
3 print "found the number",x
4 break;
5else:
6 print "not found!"
关于for和while循环结合else语句使用的情况,在python 官方文档中有相应的解释,如下:
Loop statements may have an else clause; it is executed when the loop terminates through exhaustion of the list (with for) or when the condition becomes false (with while), but not when the loop is terminated by a break statement.
翻译:循环语句后可以有一个else从句,这个else从句在因为for循环中list全部遍历完或者因为while循环中条件不满足而执行,而如果循环中有break语句执行了则else从句就不执行了。。再来一个例子:
1#!/usr/bin/python
2import time
3for x in range(1,11):
4 print x
5 time.sleep(1)
6else:
7 print "ending"
三、while语句
Python的while语句和C语言几乎一样,只是判断条件没有括号围着。
示例:
1#!/usr/bin/env python
2x = 0
3while x <= 100:
4 x += 1
5 print x
如果想使用死循环,可以将条件改成True ,如下
1#!/usr/bin/env python
2x = 0
3while True:
4 x += 1
5 print x
再一个示例:
1a, b = 0, 1
2fib = []
3while len(fib) < 10: #循环条件没有括号
4 a, b = b, a+b #对两个值同时赋值,相当于a=b,b=a+b
5 fib.append(b)
6print fib
同for语句一样,while也可以和else结合使用,示例如下:
1#!/usr/bin/python
2x = ""
3while x != "q":
4 print "hello"
5 x = raw_input("please input something,q for quit:")
6 if not x:
7 break
8 if x == "c":
9 continue
10 print "one more time---"
11else:
12 print "ending......"
四、break和continue
break和continue也是从C语言借鉴过来的,break跳出当层循环,continue开始执行循环下一轮。结合for……else……break的示例:
1factor = []
2for n in range(2, 20):
3 for x in range(2, n):
4 if n%x == 0:
5 print n, "=", x, "*", n/x
6 break;
7 else: # 这个else是和第3行的for匹配的
8 factor.append(n)
9print factor
break与continue的区别:当break语句在循环结构中执行时,它会导致立即跳出循环结构。,当continue语句在循环结构中执行时,并不会退出循环结构,而是立即结束本次循环,重新开始下一轮循环。示例:
1#break语句
2for x in range(10):
3 if x==5:
4 break
5 print x
6#输出0-4
7#continue语句
8for x in range(10):
9 if x==5:
10 continue
11 print x
12#输出0-9(5除外,当值为5时,则跳出本次循环,立即执行下次循环)
五、pass语句
pass语句主要出现在复合语句中,if,while,for都是复合语句(compound statement), 复合语句就是包含其他语句的语句,除了if,while,for还有with,try以及函数和类定义。而在复合语句中,如果我们什么都不需要做,就可以用pass,这就像C语言中只是一个分号的空语句。示例:
1while True:
2 pass
运行该示例代码后,程序会一直等待键盘Ctrl + C 来终止。
六、with语句
with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能。with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。
示例:
1with open('/proc/2/status') as f:
2 for line in f:
3 if line.startswith('FDSize'):
4 print 'fdsize:' , line.split(":")[1].strip()
with的详细说明,请参看我摘录的另一篇博文 理解Python的With语句 。
七、del 语句
Python解释器通过垃圾回收可以将内存中没有任何引用的对象给清理掉。也可以通过del语句直接将一个对象从内存中清除,如下:
1x = ['hello','world']
2del x
3print x
4
5#删除完对象,再pirnt时,会报错 NameError: name 'x' is not defined
八、exec与eval
使用exec语句可以执行存储在字符串中的Python代码,通过使用eval语句可以计算以字符串形式书写的Python表达式。示例如下:
1>>> exec "print 'hello,world'"
2hello,world
3>>> eval(raw_input("Enter an arithmetic expression:"))
4Enter an arithmetic expression:25+34
559
6>>> eval("2*3")
76
注:在Python中使用exec执行Python代码字符串和通过eval语句计算Python表达式,这样的做法并不推荐,因为这样会有潜在的严重漏洞。 因为可能会有用户提供一些恶意的字符串作为代码或表达式来执行,这样程序会有潜在失去控制的危险。
流程控制及相关语句的总结,到此先划一个句号(再写就偏题了, 本身后半部分已经非流程控制的范畴)。像try……except……finally 、assert、yield、raise 语句于再单独做篇幅进行总结。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-controlflow/3692.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.