第8章 条件和循环
8.1 if语句
if expression:
expr_true_suite
8.2 else语句
if expression:
expr_true_suite
else:expr_false_suite
8.3 elif语句
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
...
elif expressionN:
exprN_true_suite
else:expr_all_of_false_suite
8.4 条件表达式(即“三元操作符”)
(1) X if C else Y
(2)such as follow:
>>> x, y = 4, 3
>>> smaller = x if x < y else y
>>> smaller
3
8.5 while语句
while expression:
suite_to_repeat
8.6 for语句
8.6.1 一般语法
for iter_var in iterable:
suite_to_repeat
8.6.2 用于序列类型
迭代序列的3种基本方法:
1.通过序列项迭代
>>>seq = [1,2,3,4]
>>>for i in seq:
... pass
2.通过序列索引迭代
>>>seq = [1,2,3,4]
>>>for i in range(len(seq)):
... pass
3.使用项和索引迭代
>>>seq = [1,2,3,4]
>>>for x, y in enumerate(seq):
... pass
8.6.3 用于迭代器类型
8.6.4 range()内建函数
(1) range(start, end, step = 1)
返回包含所有k的列表,start<= k <end, k之间以step值为等差递增,step默认为1,不可为0。
(2) range(end)
step默认为1,返回从0到end-1的列表
(3) range(start, end)
step默认为1,返回从start至end-1的列表
8.6.5 xrange内建函数
类似range(),在有大范围列表时使用更为合适,因为不会在内存里创建列表的完整拷贝。
8.6.6 与序列相关的内建函数
sorted()
reversed()
enumerate()
zip()
8.7 break 语句
用以中断循环语句,即中止循环语句的执行,即使循环条件没有变更为False,或队列中的项目尚未完全迭代。
8.8 continue语句
跳过当前循环块中的剩余语句,并继续该循环的下一次迭代。
8.9 pass语句
不做任何事情
8.10 再谈else语句
while和for循环中使用else语句,else子句只在循环完成后执行,被break中断的循环也不会执行else语句。
while expression:
code_suite
else:
pass
8.11 迭代器和iter()函数
8.11.1 什么是迭代器
(1)迭代器为类序列对象提供了一个系列的接口。
(2)可以迭代不是序列但表现出序列行为的对象,如字典和文件。
8.11.2 为什么要迭代器
8.11.3 如何迭代
(1)迭代器就是有一个next()方法的对象,而不是通过索引来计数。
(2)reversed()内建函数将返回一个反序列访问的迭代器,enumerate()内建函数也返回迭代器。
8.11.4 使用迭代器
1.序列
for i in seq:
do_something_to(i)
2.字典
字典的迭代器会遍历它的键,语句for eachkey in myDict.keys()可以缩写为for eachkey in myDict。
3.文件
文件对象生成的迭代器会自定调用readline()方法,这样,循环就可以访问文本文件的所有行。可以使用for eachline in myFile 替换 for eachline in myFile.readlines()。
8.11.5 可变对象和迭代器
在对可变对象进行迭代时,不可更改可变对象。
8.11.6 如何创建迭代器
(1)对一个对象调用iter()就可以得到其迭代器。
iter(obj)
iter( func, sentinel ) #如果传递2个参数给iter(),它会重复地调用func,直到迭代器的下个值等于sentinel。
(2)case as follow:
>>> x = [1, 2, 3]
>>> y = iter(x) #根据列表创建迭代器
>>> next(y)
1
>>> next(y)
2
8.12 列表解析
(1)列表解析来自函数式编程Haskell。
[ expr for iter_var in iterable ]
(2)扩展语法
[ expr for iter_var in iterable if cond_expr ]
(3)矩阵样例
迭代3行5列的矩阵
>>> [ (x+1, y+1) for x in range(3) for y in range(5) ]
(4) 磁盘文件样例
8.13 生成器表达式
(1)生成器表达式是列表解析的一个扩展,生成器是特定的函数,允许你返回一个值,然后暂停代码的执行,稍后恢复(第11章细讲生成器)。
(2)生成器表达式与列表解析非常相似,基本语法基本相同,不过并不真正创建数字列表,而是返回一个生成器,这个生成器在每次计算一个条目后,把这个条目产生(yield)出来。
列表解析:
[ expr for iter_var in iterable if cond_expr ]
生成器表达式:
( expr for iter_var in iterable if cond_expr )
8.14 相关模块
8.15 练习