2.創(chuàng)建生成器方法1
要創(chuàng)建一個生成器,有很多種方法到旦。第一種方法很簡單,只要把一個列表生成式的 [ ] 改成 ( )
3. 創(chuàng)建生成器方法2
generator非常強大。如果推算的算法比較復雜师郑,用類似列表生成式的 for 循環(huán)無法實現(xiàn)的時候,還可以用函數(shù)來實現(xiàn)调窍。
4.
在使用生成器實現(xiàn)的方式中宝冕,我們將原本在迭代器__next__方法中實現(xiàn)的基本邏輯放到一個函數(shù)中來實現(xiàn),但是將每次迭代返回數(shù)值的return換成了yield邓萨,此時新定義的函數(shù)便不再是函數(shù)地梨,而是一個生成器了。簡單來說:只要在def中有yield關鍵字的 就稱為 生成器
5.
使用了yield關鍵字的函數(shù)不再是函數(shù)阐虚,而是生成器秘车。(使用了yield的函數(shù)就是生成器)
yield關鍵字有兩點作用:
保存當前運行狀態(tài)(斷點)纠亚,然后暫停執(zhí)行,即將生成器(函數(shù))掛起
將yield關鍵字后面表達式的值作為返回值返回万细,此時可以理解為起到了return的作用
可以使用next()函數(shù)讓生成器從斷點處繼續(xù)執(zhí)行,即喚醒生成器(函數(shù))
Python3中的生成器可以使用return返回最終運行的返回值铃芦,而Python2中的生成器不允許使用return返回一個返回值(即可以使用return從生成器中退出雅镊,但return后不能有任何表達式