python 生成器generator
生成器不会把结果保留在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值。直到遇到stopIteration异常结束。
gen=(x**2 for x in range(5))
创建生成器generator
第一种方法:只要报一个列表生成式的[]改成(),就穿件了一个generator.
创建列表
L=[X*X for x in rang(10)]
print L
#[0,1,4,9,16,25,36,49,64,81]
第二种方法:用函数来实现。裂变生成式的for循环无法实现的时候,还可以用函数来实现。
函数定义中包含yield关键字那么函数就变成了生成器。在生成器执行过程中,遇到yield就中断,下次又继续从中断点后执行。
函数形式定义的生成器一般不会用next()来获取下一个返回值。而是直接用for循环来迭代。
def fib(m):
n, a, b = 0, 0, 1
while n < m:
yield b
a, b = b, a + b
n = n + 1