4. 其他流程控制工具
4.1. if 语句
大多数人都很熟悉的if语句:
if condition1:pass
elif condition2:pass
else condition3:pass
注意python中没有switch或case语句,所以一个 if ... elif ... elif ...
序列可以看作是其他语言中的 switch 或 case 语句的替代。
4.2. for 语句
Python 中的 for 语句并不总是对算术递增的数值进行迭代(如同 Pascal),或是给予用户定义迭代步骤和暂停条件的能力(如同 C),而是对任意序列进行迭代(例如列表或字符串),条目的迭代顺序与它们在序列中出现的顺序一致。
在遍历同一个集合时修改该集合的代码可能很难获得正确的结果。通常,更直接的做法是循环遍历该集合的副本或创建新集合:
# 遍历副本
for user, status in users.copy().items():if status == 'inactive':del users[user]# 创建新集合
active_users = {}
for user, status in users.items():if status == 'active':active_users[user] = status
4.3. range() 函数
若要遍历一个数字序列,就可以用range()
函数。传入参数为range(初值,终值,步长),注意左闭右开,终值不包括在内:
>>> for i in range(0,10,3):
... print(i)
...
0
3
6
9
range()
所返回的对象在许多方面表现得像一个列表,但实际上却并不是。此对象会在你迭代它时基于所希望的序列返回连续的项,但它没有真正生成列表,这样就能节省空间。
我们称这样对象为 iterable(可迭代对象),也就是说,适合作为这样的目标对象:函数和结构期望中从获取连续的项直到所提供的项全部耗尽。
4.4. break 和 continue 语句,以及循环中的 else 子句
break
语句,和 C 中的类似,用于跳出最近的 for 或 while 循环。
注意循环中的else
子句和条件判断if
中的else
不一样,它会在循环耗尽了可迭代对象 (使用 for) 或循环条件变为假值 (使用 while) 时被执行,但不会在循环被 break 语句终止时被执行。
相比于if
语句中的else
,它更像try
语句中的else
, try
语句中的 else
子句会在未发生异常时执行,而循环中的 else
子句则会在未发生 break 时执行。
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, 'equals', x, '*', n//x)
... break
... else:
... # loop fell through without finding a factor
... print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
注意看: else
子句属于 for
循环, 不属于 if
语句。
continue
语句则是借鉴自 C 语言,表示继续循环中的下一次迭代。
4.5. pass 语句
pass
语句什么也不做。当语法上需要一个语句,但程序需要什么动作也不做时,可以使用它:
>>> while True:
... pass # 一直忙,等待键盘中断(按Ctrl+C)
...