1.什么是生成器?
在python中,一边计算一遍循环的机制被称为生成器(generator),极大节省了内存空间。
2.生成器的创建
2.1生成器创建方法1
首先,我们可以通过[x for x in range(10) ]
创建一个列表。
想要创建一个生成器,只需把
[]
改为()
即可。
在列表中,可以直接打印数据,生成器保存的是算法,如果需要打印生成器中的数据,可以通过next()方法逐个打印,没有更多数据时,就会抛出StopIteration的错误。正常情况下,我们会用for循环代替next()方法,并且不用担心出现StopIteration的错误。
2.2生成器创建方法2
在函数中使用yield关键字,函数就变成了生成器。以斐波那契数列为例:
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
def f(max):
n,a,b=0,0,1
while n<max:
yield b
a,b=b,a+b
n=n+1
同样的,把函数改成generator后,我们基本上从来不会用next()来调用它,而是直接使用for循环:
generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。
要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。