定义:
python中一边循环一边计算的机制,成为生成器:generator。生成器是一个函数,它记住上一次返回时在函数体中的位置。对生成器的第二次(或第n次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。生成器不仅“记住”了它数据状态,还记住了它在流控制构造中的位置。
生成器的特点:
1、节约内存
2、迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整
个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的
创建生成器的方式
只要把列表生成式[]改成()
L=[x*2 for x in range(5)]
G= (x*2 for x in range(5))
我们可以直接通过打印L,G是一个生成器,可以通过next(G) 访问G中的元素,也可以通过G.next()访问元素。
如果推荐的算法比较复杂,用类似生成式的for循环无法实现的时候,可以使用函数类实现。比如著名的斐波拉契数列,除了第一个和第二个数外,任意一个数都可以由前两个数相加。
def fib(times):
n=0
a,b=0,1
while n<times:
print(b)
a,b=b,a+b
n+=1
return 'done'
把print修改为yield就可以生成生成器了。
def fib(times):
n=0
a,b=0,1
while n<times:
yield b
a,b=b,a+b
n+=1