Python 流程控制
if语句
运行示例:
- 注意冒号和缩进,简单的一条语句可以直接跟在冒号后面。
- 关键字elif是“else if”的缩写,可以有效地避免过深的缩进。
- if...elif...elif...相当于其他语言中的
switch
或case
语句,最后的else是可选的。 - 在Python中非零整数、长度不为零的字符串以及非空序列都为True。
- 不要写出
if x == True:
这样的代码,明显if x:
更优雅。
for语句
Python 的 for 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代。
运行示例:
在迭代过程中对迭代序列(可变序列)进行修改不安全,解决方法是对其副本进行迭代,用切片可以优雅地实现:
- while语句类似,同样注意冒号
:
以及缩进,另外Python中没有do while循环。
range()函数
range()函数返回一个等差级数链表,可以方便的用来获得数值序列:
range()函数用链表的索引值填充这个序列,此外我们还可以指定起始值和步进值(步长):
range(5, 10)
5 through 9
range(0, 10, 3)
0, 3, 6, 9
range(-10, -100, -30)
-10, -40, -70
和len()结合使用,达到更好的迭代效果:
不过其实enumerate()函数在这种场合更方便:
如果你只是打印一个序列的话会发生奇怪的事情:
>>> print(range(10)) range(0, 10)
在不同方面range()函数返回的对象表现为它是一个列表,但事实上它并不是。当你迭代它时,它是一个能够像期望的序列返回连续项的对象;但为了节省空间,它并不真正构造列表。
我们称此类对象是可迭代的,即适合作为那些期望从某些东西中获得连续项直到结束的函数或结构的一个目标(参数)。我们已经见过的for语句就是这样一个迭代器。list()函数是另外一个( 迭代器 ),它从可迭代(对象)中创建列表:
>>> list(range(5)) [0, 1, 2, 3, 4]
break和continue语句以及循环中的else子句
break和continue语句和C语言中的是一个意思,主要说下循环中的else语句。Python中循环可以有一个else语句,在迭代完成(if语句)或者不满足迭代条件(while语句)时执行,而且在循环被break中止时不会执行。以搜索素数的示例程序来演示如下:
pass语句
pass语句啥也不干,可用于那些语法上需要,但实际上什么也不做的场合。通常用于创建最小结构的类:
>>> class MyEmptyClass:
... pass
...
当然也可以用来在程序中“占位”,先在更抽象的级别上构思,具体的实现细节再说。