1.什么是生成器
用一個比喻來形容,工廠中生產保齡球的流水線,機器每次只生產一個保齡球,下次繼續生產下一個,直到停止(原料不足,停止供電等條件)為止。
機器就是我們的生成器。
2.使用示例
在python中數組的語法是[]
L=[x * x for x in range(10)] print L
生成器的語法是()
g=(x*x for x in range(10)) print g print g.next()
運行結果如下:
運行后,數組全部初始化,生成器執行一次,記錄當前位置,下次繼續執行。
3.使用yield生成器
def odd(): print "step 1" yield print "step 2" yield print "step 3" yield o=odd() o.next() o.next() o.next()
運行結果如下:
加入yield后,odd就不是普通函數了,而是一個生成器,在執行過程中,遇到yield就中斷,下次又繼續執行。
4.生成器和數組的區別
比如一組100萬的數據,用數組來存儲,需要占用很大的存儲空間,而用生成器,每次只占用一個空間。
5.生成器和函數的區別
函數在return或者函數最后一條語句后返回,生成器generator在每次調用next()時執行,遇到yield就返回,再次執行時從上次返回的yield語句處繼續執行。