本文講解一下python生成器的基本用法。python
當數據量很大的時候,好比從一個超大文本文件中讀取內容,若是一會兒把數據所有放在列表中,至關於一會兒把大量數據放在了內存中,有可能形成內存溢出。那麼如何解決呢?算法
解決方案:不存儲全部的數據,而是存儲列表元素的生成算法(至關於遞推公式),只在使用的時候再根據生成算法生成相應的元素(惰性計算),這就是生成器。函數
a = (x for x in range(3)) print '【Output】' print type(a) print a.next() print '-----' for x in a: print x
【Output】 <type 'generator'> 0 ----- 1 2
若是生成器的遞推算法比較複雜,列表生成式的方式已經沒法知足要求,那麼能夠用函數+yield關鍵字的方式來建立生成器。code
若是一個函數中出現了yield關鍵字,那麼這個函數就再也不是一個普通函數了,而變成了一個生成器,例如:內存
def getNum(max): x = 0 while x < max: yield x # 至關於把普通函數的return語句變成了yield語句 x += 1 a = getNum(3) print '【Output】' print type(a) for x in a: print x
【Output】 <type 'generator'> 0 1 2
def get(): for i in range(3): print 'step' + str(i) yield i yield 111 for i in range(10,12): print 'step' + str(i) yield i yield 222 a = get() print '【Output】' for x in a: print x
【Output】 step0 0 step1 1 step2 2 111 step10 10 step11 11 222
def fib(max): a,m,n = 0,1,1 while(a < max): yield m m,n = n,m+n a += 1 print '【Output】' for x in fib(6): print x
【Output】 1 1 2 3 5 8