迭代器与生成器
可迭代与迭代器
- 可迭代(iterable):能用于
for ... in,实现了__iter__(返回一个迭代器) - 迭代器(iterator):同时实现
__next__(产出下一个值)和__iter__(通常返回自身)
可迭代不一定是迭代器;iter(x) 会从可迭代对象得到迭代器。迭代器耗尽后不能重复遍历。
it = iter([10, 20])
print(next(it)) # 10
print(next(it)) # 20
print(iter(it) is it) # True:迭代器的 __iter__ 返回自身
生成器函数(yield)
def countdown(n):
while n > 0:
yield n
n -= 1
for x in countdown(3):
print(x) # 3 2 1
调用生成器函数不会立刻跑完,返回的是生成器对象;每次迭代推进到下一个 yield。
生成器表达式
gen = (x * x for x in range(5))
print(sum(gen))
与列表推导式类似,但惰性、不一次建完整个列表。