基本内容
# 生成器是一个包含了 yield 语句的函数
# 生成器实际上是由生成器的函数和生成器的迭代器组成,那么生成器就是可迭代的
# 生成器每次产生一个值,然后把程序挂起(可理解为暂停,但程序并没有暂停),函数被再次调用时,就从暂停的那个点继续向后执行
# 生成器函数别调用时,遇到 yield 返回一个值,遇到 return 生成器停止
# 一个简单的生成器,取出列表的列表中的元素 generator.py
li = [[1], [2, 3], [4, 5,6]]
def generator(li):
for i in li:
for j in i:
yield j
>>> from generator import li, generator
>>> generator(li)
<generator object generator at 0x7f57a4eff0a0> # 返回一个生成器对象
>>> for i in generator(li):
... print(i)
...
1
2
3
4
5
6
# 生成器推导式,与列表推导式类似,只不过是用圆括号,返回生成器
>>> y = (i*i for i in range(5))
>>> y
<generator object <genexpr> at 0x7f57a4eff1a8>
>>> next(y)
0
>>> next(y)
1
>>> list(y)
[4, 9, 16]
生成器实现斐波那契数列
# generator.py
def fibs():
a = 0
b = 1
while True:
a, b = b, a+b
yield a
>>> from generator import fibs
>>> f = fibs()
>>> f
<generator object fibs at 0x7fdb5a7c20f8>
>>> next(f)
1
>>> next(f)
1
>>> next(f)
2
>>> next(f)
3
>>> next(f)
5