您的位置:首页 > 编程语言 > Python开发

《Python核心编程》(第二版) 第8章 条件和循环

2017-04-02 21:43 183 查看
第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 练习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: