Python yield

yield 是一個類似 return 的關(guān)鍵字,只是這個函數(shù)返回的是個生成器。

>>> def createGenerator() :
...    mylist = range(3)
...    for i in mylist :
...        yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...     print(i)
0
1
4

作者:NearTan
鏈接:http://www.itdecent.cn/p/84e66ced656f
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

這個例子沒什么用途,但是它讓你知道,這個函數(shù)會返回一大批你只需要讀一次的值.

為了精通 yield ,你必須要理解:當(dāng)你調(diào)用這個函數(shù)的時候,函數(shù)內(nèi)部的代碼并不立馬執(zhí)行 ,這個函數(shù)只是返回一個生成器對象,這有點(diǎn)蹊蹺不是嗎。那么,函數(shù)內(nèi)的代碼什么時候執(zhí)行呢?當(dāng)你使用for進(jìn)行迭代的時候.

現(xiàn)在到了關(guān)鍵點(diǎn)了!

第一次迭代中你的函數(shù)會執(zhí)行,從開始到達(dá) yield 關(guān)鍵字,然后返回yield 后的值作為第一次迭代的返回值. 然后,每次執(zhí)行這個函數(shù)都會繼續(xù)執(zhí)行你在函數(shù)內(nèi)部定義的那個循環(huán)的下一次,再返回那個值,直到?jīng)]有可以返回的。

如果生成器內(nèi)部沒有定義 yield 關(guān)鍵字,那么這個生成器被認(rèn)為成空的。這種情況可能因?yàn)槭茄h(huán)進(jìn)行沒了,或者是沒有滿足if/else 條件。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 你不知道JS:異步 第四章:生成器(Generators) 在第二章,我們明確了采用回調(diào)表示異步流的兩個關(guān)鍵缺點(diǎn):...
    purple_force閱讀 1,043評論 0 2
  • 你不知道JS:異步 第四章:生成器(Generators) 接上篇4-1 生成器委托(Generator Dele...
    purple_force閱讀 594評論 0 1
  • 從例 1.1 可以看到,func和gen都是函數(shù), 但前者返回數(shù)字 1,后者返回的是個生成器(generator)...
    樊海鵬閱讀 272評論 0 0
  • 特別說明,為便于查閱,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 493評論 0 0
  • 9.17日早上,我,啊標(biāo),陳響,拖著疲憊的身體4點(diǎn)多就起了,很困,夜里談?wù)摿瞬簧俳窈蟀l(fā)展,走過的路,看過的人。 熱...
    追風(fēng)_37ee閱讀 612評論 0 2

友情鏈接更多精彩內(nèi)容