什麼是生成器?根據固定的算法和初始條件,邊循環邊生成元素,而沒必要提早把列表儲存起來。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]