python 流程控制学习
2020-06-17 本文已影响0人
fdsun
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
语句的替代。
for 语句
- Python 中的
for
语句与你在 C 或 Pascal 中所用到的有所不同。 Python 中的for
语句并不总是对算术递增的数值进行迭代(如同 Pascal),或是给予用户定义迭代步骤和暂停条件的能力(如同 C),而是对任意序列进行迭代(例如列表或字符串),条目的迭代顺序与它们在序列中出现的顺序一致。 例如(此处英文为双关语):
>>> # Measure some strings:
... words = ['cat', 'window', 'defenestrate']
>>> for w in words:
... print(w, len(w))
...
cat 3
window 6
defenestrate 12
- 在遍历同一个集合时修改该集合的代码可能很难获得正确的结果。通常,更直接的做法是循环遍历该集合的副本或创建新集合:
# Strategy: Iterate over a copy
for user, status in users.copy().items():
if status == 'inactive':
del users[user]
# Strategy: Create a new collection
active_users = {}
for user, status in users.items():
if status == 'active':
active_users[user] = status
range()
函数
- 如果你确实需要遍历一个数字序列,内置函数
range()
会派上用场。它生成算术级数:
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
- 给定的终止数值并不在要生成的序列里;range(10) 会生成10个值,并且是以合法的索引生成一个长度为10的序列。range也可以以另一个数字开头,或者以指定的幅度增加(甚至是负数;有时这也被叫做 '步进')
range(5, 10)
5, 6, 7, 8, 9
range(0, 10, 3)
0, 3, 6, 9
range(-10, -100, -30)
-10, -40, -70
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
- 然而,在大多数这类情况下,使用
enumerate()
函数比较方便,请参见 循环的技巧 。 - 如果你只打印 range,会出现奇怪的结果:
>>> print(range(10))
range(0, 10)
-
range()
所返回的对象在许多方面表现得像一个列表,但实际上却并不是。此对象会在你迭代它时基于所希望的序列返回连续的项,但它没有真正生成列表,这样就能节省空间。 -
我们称这样对象为 iterable,也就是说,适合作为这样的目标对象:函数和结构期望从中获取连续的项直到所提供的项全部耗尽。 我们已经看到
for
语句就是这样一种结构,而接受可迭代对象的函数的一个例子是sum()
:
>>> sum(range(4)) # 0 + 1 + 2 + 3
6
- 稍后我们将看到更多返回可迭代对象以及将可迭代对象作为参数的函数。 最后,也许你会很好奇如何从一个指定范围内获取一个列表。 以下是解决方案:
>>> list(range(4))
[0, 1, 2, 3]
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!
...
参见:流程控制