什么是生成器?根据固定的算法和初始条件,边循环边生成元素,而没必要提早把列表储存起来。python
为何使用生成器?节省内存。算法
参考:函数
生成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]