什么是生成器?根据固定的算法和初始条件,边循环边生成元素,而不必提前把列表储存起来。
为什么使用生成器?节省内存。
参考:
生成generator的方法:
1、 把一个列表生成式的 [] 改成 () ,就创建了一个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 0x7f9ab711c0a0>
>>> type(g)
<type 'generator'> #类型是generator
>>> type(L)
<type 'list'>
2、自定义函数中,把 print 改为yield,使用for 循环来输出结果
>>> def sanjiao(max):
... n=0
... b=[1]
... a=[1,1]
... while n <max:
... yield b
... if (len(b)==1):
... b=a
... else:
... for i in range(len(b)-1):
... a.insert(i+1,b[i]+b[i+1])
... b=a
... a=[1,1]
... n=n+1
...
>>> sanjiao(10)
<generator object sanjiao at 0x7f9ab7160d20>
>>> for i in sanjiao(10):
... print i
...
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]