本文共 2488 字,大约阅读时间需要 8 分钟。
除了前面介绍的while语句外,python也使用在其他语言中所熟知的一些流程控制语句。
2.1 if语句
可能最被人周知控制语句就是if语句了,例如:
>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
>>> if x < 0:
... x = 0
... print(’Negative changed to zero’)
... elif x == 0:
... print(’Zero’)
... elif x == 1:
... print(’Single’)
... else:
... print(’More’)
...
More
Elif 可不出现也可多次出现和else部分也是可以选择的。关键elif是else if 的缩写形式,对于避免冗长的定义有很大帮助。If... Elif... Elif 语句在其他变成语言中可用switch 或case 语句来替代。
2.2 for语句
在python中的for语句可能有以前你在C或者pascal中所用的有点小差别。她既不像Pascal语言中常常遍历数组的算法过程,也不像在C语言中给用户自己定义遍历步骤或模糊条件的能力,python中的for语句可以按照元素在序列(列表或者字符串)中出现的顺序逐步地遍历它们。例如:
>>> # Measure some strings:
... a = [’cat’, ’window’, ’defenestrate’]
>>> for x in a:
... print(x, len(x))
...
cat 3
window 6
defenestrate 12
在循环语句中修改正在遍历的序列是不安全的(这种情况仅仅发生在可变类型中,如列表)。如果你需要修改你正在遍历的列表(例如,想复制选中项)你必须首先复制list。然后利用分片符号很方便实现它。
>>> for x in a[:]: # make a slice copy of the entire list
... if len(x) > 6: a.insert(0, x)
...
>>> a
[’defenestrate’, ’cat’, ’window’, ’defenestrate’]
2.3 range()方法
如果你想迭代一个数字序列,内置方法range()可以很方便实现它。它可以生成连续的数字:
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
方法中给出的结点不是产生序列中的一部分。Range(10)就是产生为长度为10序列中每个元素产生10个合法的索引值。该方法也可以让范围从其他数字开始,或者指定不同的增长数(甚至是负数,有时称这为阶梯)。
range(5, 10)
5 through 9
range(0, 10, 3)
0, 3, 6, 9
range(-10, -100, -30)
-10, -40, -70
为了迭代序列的目录,你可以结合range()和len()结合起来,例如:
>>> a = [’Mary’, ’had’, ’a’, ’little’, ’lamb’]
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
但是,在许多情况下,运用enumerate()方法会更加方法,具体参照 Looping Techniques.
如果你想打印一个范围,奇怪的现象将会出现。
>>> print(range(10))
range(0, 10)
在很多情况下利用range()返回对象表现像列表,但实际上它不是列表。尽管当你迭代期望序列时,它能够依次地返回元素,但是它没有真正生成列表,因此节省空间。
我们可以把对象成为是可迭代的,就是指它很适合作为预期得到有序元素事情的方法和结构的对象。 我们已经知道for语句就是这种迭代器。方法list()也算一个,它可以产生有序列表。
>>> list(range(5))
[0, 1, 2, 3, 4]
稍后我们会看到更多能返回迭代对象和把迭代对象当做内容的方法。
2.4 break和continue语句和在循环中的else子句
与在C语言中一样,Break 语句将会跳出离它最近的for或者while循环。
Continue语句也是从C中借鉴而来,继续开始循环的下一步。
循环语句中有时含有else的子句。当通过遍历结束导致循环终止(for)或者当循环条件变为false(如while),它将会执行。但是当循环被break语句所终止,它不会被执行。下面通过查询质数这个例子来学习:
是的,这是正确代码。请仔细看,else语句是属于for循环的,而不是if语句。与else用在if语句中相比,else用于循环中与用在try语句有更多相同之处。在try语句中当没有异常发生else语句将会执行,循环中当没有break发生else语句就会执行。对于更多的关于try语句和异常的信息可以查看处理异常:
2.5 Pass语句
Pass语句一般做些无关紧要的事情,当按照句法语句被要求时但是系统不需要任何操作,此时可以用pass语句。例如:
>>> while True:
... pass # Busy-wait for keyboard interrupt (Ctrl+C)
...
还常常用在创建最小类中。
>>> class MyEmptyClass:
... pass
...
能用到pass的另一个地方就是当你运行新代码时它作为方法或者条件主体的拥有者,允许你在一个更加抽象的层次去不停地思考。Pass将会被静静忽略:
>>> def initlog(*args):
... pass # Remember to implement this!
...