Python循环和迭代器
Contents
Python循环和迭代器
作者:最西瓜 来源:《Core Python Programming, Second Edition》CH8. Conditionals and Loops
Python 支持一种特殊形式的三元操作符 ret = X if C or Y
当条件 C 为真时,返回 X 否则返回 Y
Python 的 for 语句跟别的传统不一样,它只能对迭代器起作用,在内部调用迭代器的 next() 方法,并且在结束时捕获 StopIteration 异常。这一点非常像是 PHP 中的 foreach 关键字。对于迭代器有一些限制:不可以回溯、不可以拷贝、不可在迭代期间新增或删除元素。用 iter() 可以取得序列的迭代器。为了达到删除的目的,使用列表解析(List Comprehensions)或者 itertools 模块中的函数。iter() 函数有两种形式:iter(obj) 可以用序列或者实现了 __iter__()
和 next() 函数的类对象作为参数;iter(func, sentinel) 用函数对象和哨兵值(sentinel)作为参数;
列表解析的形式如下:
|
|
列表解析还支持多重嵌套 for 循环:[(x+1,y+1) for x in range(3) for y in range(5)]
完整的描述在 PEP202 中。生成器表达式(Generator Expressions)是列表解析的迭代器版本,它不直接创建列表,而是在每次迭代中返回一个值,形式如下:(expr for iter_var in iterable if cond_expr)
,以下是一些高级用法:
|
|
为了模拟传统 for 循环,可以使用 range([start,] end[, step=1]) 函数,start 和 step 都是可选的,如果 start 不提供则默认从 0 开始,range() 函数返回 k, start <= k < end, k 以 step 步进。xrange() 是 range() 的迭代器版本。
Python 中有 pass 语句来表示什么也不执行,通常用于 stub 代码中或者异常处理中。
Python 的 for 和 while 可以包含 else 子句,只有在循环正常结束,而不是通过 break 跳出时才会执行 else 部分。
Author zoro.wang
LastMod 2017-09-08