在Python中,一边循环一边计算的机制,称为生成器:generator。
创建生成器的方法一:只要把一个列表生成式的[]
改成()
,就创建了一个generator
>>> L = [x * x for x in range(10)] #列表生成式
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10)) #生成器
>>> g
<generator object <genexpr> at 0x1022ef630>
创建生成器的方法二:如果一个函数定义中包含yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator。
用函数打印斐波拉契数列
def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b
n = n + 1
return 'done'
把fib
函数变成generator,只需要把print(b)
改为yield b
就可以了
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
变成generator的函数,在每次调用next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行。