python生成器generator

什么是生成器?根据固定的算法和初始条件,边循环边生成元素,而不必提前把列表储存起来。

为什么使用生成器?节省内存。

参考:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000

生成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]

猜你喜欢

转载自my.oschina.net/u/3393220/blog/1547431