python 中的流程控制语句

原文

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

  

用来代替其它语言中 switch 或 case 语句。关键字 ‘elif‘ 是 ‘else if’ 的缩写, 它可以有效避免过度缩进。

 

for 语句

Python 中的 for 语句与你在 C 或是 Pascal 中使用的略有不同. 不同于在 Pascal 中总是依据一个等差的数值序列迭代, 也不同于在 C 中允许用户同时定义迭代步骤和终止条件, Python 中的 for 语句在任意序列 (列表或者字符串) 中迭代时, 总是按照元素在序列中的出现顺序依次迭代.

在循环过程中修改被迭代的对象是不安全的 (这只可能发生在可变序列类型上,如列表).

若想在循环体内修改你正迭代的序列 (例如复制序列中选定的项), 最好是使用切片制作一个副本.

>>> # 测试一些字符串:
... a = ['cat', 'window', 'defenestrate']
>>> for x in a:
...     print(x, len(x))
...
cat 3
window 6
defenestrate 12

  

修改序列,先制作一个副本

>>> for x in a[:]: # 制造整个列表的切片复本
...    if len(x) > 6: a.insert(0, x)
...
>>> a
['defenestrate', 'cat', 'window', 'defenestrate']

 

range 函数式

产生等差级数列

可接受1个、2个或3个参数。

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

制定起始位置、长度和增量

range(5, 10)
   5 through 9

range(0, 10, 3)
   0, 3, 6, 9

range(-10, -100, -30)
  -10, -40, -70

* 还可以迭代一个列表

>>> 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

虽然 range函数表现得像一个列表, 但实际上它不是. 如果你对其进行迭代时, 它能返回所需要的连续项, 但实际上为了节省空间并没有真正地生成制造一个列表.这种特性叫做可迭代性(iterable)

>>> print(range(10))
range(0, 10)

具有可迭代性的对象可以被迭代器所迭代。比如 for 语句就是这种迭代器 ( iterator ).此外,还有 list() 函数; 它从可迭代对象中生成列表:

>>> list(range(5))
[0, 1, 2, 3, 4]

 

循环中的 else子句

循环语句可以有一个 else 子句; 当循环因耗尽整个列表而终止时 (使用 for) 或者当条件变为假时 (使用 while), 它就会被执行, 但是, 如果循环因为 break 语句终止的话, 它不会被执行. 

与循环搭配使用时, else 子句的行为和它与 try 语句的搭配时相对于与 if 语句的搭配时有更多共性: 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:
...         # 循环因为没有找到一个因数而停止
...         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 语句。else 语句只会在最近的一次循环结束,并且该循环没有执行到 break时才执行。)

 

pass 语句

pass 语句什么都不做. 当语法上需要一个语句, 但程序不要动作时, 就可以使用它. 例如:

>>> while True:
...     pass  # 忙等待键盘中断 (Ctrl+C)
...

一般可以用于创建最小类

>>> class MyEmptyClass:
...     pass
...

另一个使用 pass 的地方是, 作为函式或条件体的占位符, 当你在新代码工作时, 它让你能保持在更抽象的级别思考. pass 会被默默地被忽略:

>>> def initlog(*args):
...     pass   # 记得实现这里!
...

 

posted on 2017-10-02 21:56  Lemo_wd  阅读(198)  评论(0编辑  收藏  举报

导航