python生成器generator

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

为何使用生成器?节省内存。算法

参考:函数

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

生成generator的方法:内存

一、 把一个列表生成式的 [] 改为 () ,就建立了一个generatorget

>>> 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'>

二、自定义函数中,把 print 改成yield,使用for 循环来输出结果generator

>>> 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]
相关文章
相关标签/搜索