第8章: 条件和循环
-
if语句
-
格式:if expression: expr_true_suite
-
-
else语句
-
格式:if expression: expr_true_suite else: expr_false_suite
- Python的缩进使用强制使代码正确对齐,避免出现“悬挂else”的问题
-
-
elif语句
- 可以使用序列和成员关系操作符,或者Python字典来替换大段的if_elif_else语句
-
条件表达式(三元操作符)
- 模拟三元表达式的一种方法:(C and [X] or [Y])[0].具体实现原理参照该篇博客。and和or的返回值是决定其值的操作数
- Python2.5将语法确定为:X if C else Y
-
while语句,for语句
- for循环会访问一个可迭代对象(例如序列或是迭代器)中的所有元素,在所有条目都处理过后结束循环
- 迭代序列基本方法:通过序列项迭代;通过序列索引迭代;使用项和索引迭代,调用enumerate()函数
- for循环访问迭代器:迭代器对象有一个next()方法,所有条目迭代完成后,迭代器引发一个StopIteration异常,for语句在内部调用next()捕获异常
- range()完整语法:range(start, end, step = 1),不包括end
- range()简略语法:range(end)或者range(start,end)
-
break语句;continue语句;pass语句;else语句
- pass语句相当于c语言中一个只有;的语句,表示什么操作也不做,只是为了满足语法要求
- else语句也可以在while和for循环中使用else语句,在循环结束之后执行,break语句也会跳过else块
-
迭代器和iter()函数
- 迭代器就是一个有next()方法的对象.调用一次next()获取下一个项。全部取出,引发一个StopIteration异常,提示外部调用者,迭代完成
- 迭代器不能向后移动,不能回到开始,不能复制一个迭代器,“一次性使用”。
-
使用迭代器
- 序列; 字典的迭代器会遍历它的键:for each in dict:, 另外三个定义迭代方法:myDict.iterkeys(),myDict.itervalues(),myDict.iteritems()
- 文件对象生成的迭代器会自动调用readline()方法
- 可变对象:在迭代可变对象时,修改它们一定要慎重,最好不要这样做
- 调用iter(obj)或者iter(func,sentinel)得到对象的迭代器。实现了__iter__()和next()的类可以作为迭代器
- 列表解析语法:[expr for iter_var in iterable] 结果值是expr表达式对于每一个列表条目作用产生的列表
- [expr for iter_var in iterable if cond_expr] if语句过滤/捕获序列成员。列表解析支持多重嵌套for循环以及多个if子句
- 当大量数据的迭代器用于列表解析,由于要生成所有数据,内存利用性能不佳。生成器表达式:(expr for iter_var in iterable if cond_expr) 生成器用作参数,每次计算出一个条目,并未建立真正列表,所有内存利用更有效