第八章 条件和循环
一、if
python中的条件表达式:很奇葩!!!
smaller = (x < y and [x] or [y])[0]
或者:
smaller = x if x < y else y
二、while
三、for
1 通过序列项迭代:
for eachName in nameList:
2 通过索引迭代:
>>>for nameIndex in range(len(nameList)):
... print "Liu,", nameList[nameIndex]
3 使用序列项和索引迭代:
>>> for i, eachLee in enumerate(nameList):
... print "%d %s Lee" % (i+1, eachLee)
四、break和continue
五、pass
Python 没有使用传统的大括号来标记代码块, 而有时有些地方在语法上要求要有代码, 而 Python 中没有对应的空大括号或是分号( ; ) 来表示 C 语言中的"不做任何事" , 若你在需要子语句块的地方不写任何语句, 解释器会提示你语法错误. 因此, Python 提供了 pass 语句, 它不做任何事情 - 即 NOP , ( No OPeration , 无操作)
六、Iterators迭代器
使用迭代器:
序列:
for i in seq:
do_something_to(i)
实际上是这样工作的:
fetch = iter(seq)
while True:
try:
i = fetch.next()
except StopIteration:
break
do_something_to(i)
字典:
字典的迭代器会遍历它的键(keys). 语句 for eachKey in myDict.keys()可缩写为 for eachKey in myDict;
另外, Python 还引进了三个新的内建字典方法来定义迭代: myDict.iterkeys() (通过 keys 迭代), myDict.itervalues() (通过values迭代), 以及 myDicit.iteritems() (通过key/value 对来迭代).
文件:
文件对象生成的迭代器会自动调用readline()方法. 这样, 循环就可以访问文本文件的所有行。程序员可以使用更简单的 for eachLine in myFile 替换 for eachLine in myFile.readlines() :
七、列表解析
Python 2.0 中我们加入了列表解析, 使语言有了一次革命化的发展,提供给用户了一个强大的工具, 只用一行代码就可以创建包含特定内容的列表!!!
基本语法:
[expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]
实际举例:
>>> [x ** 2 for x in range(6)]
[0, 1, 4, 9, 16, 25]
>>> [x for x in seq if x % 2]
[11, 9, 9, 9, 23, 9, 7, 11]
>>> [(x+1,y+1) for x in range(3) for y in range(5)]
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2,
3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]
八、生成器表达式
生成器表达式是列表解析的一个扩展
基本语法:
(expr for iter_var in iterable if cond_expr)
实际举例:
>>>x_product_pairs = ((i, j) for i in rows for j in cols())
>>>type(x_product_pairs)
<type 'generator'>
>>>for i in x_product_pairs:
... print i
...
(0,0)
(0,1)
...