天天看點

python中的yield關鍵字用法

python

執行結果

程式執行 g=foo()時,因foo函數中有yield關鍵字,是以foo函數不會真正執行,還是會得到一個(generator)對象的生成器

直到調用 next方法時,foo函數才真正執行,首先執行foo函數中的 print("test"),,然後進入while循環

直到遇到yiled關鍵字,可以将yield關鍵字類似于return,程式停止,【重點:并沒有将4執行賦給res】,此時,程式執行Next(g)語句,輸入【4】

程式又開始執行next(g),這是foo函數從 上一個【next(g)】在yield關鍵字執行停止的地方開始執行,是以 輸出【res: None】

程式繼續執行while中的代碼,再次遇到yield,同樣類似return 傳回4,程式終止

總結:

若函數中有yield,則不再是一個函數,而是一個生成器,則這個生成器則有next函數

next開始的地方則是上一次next停止的地方執行,是以調用next的時候,生産器不會從foo函數開始的地方執行,而是從上一步停止的地方開始,若再次遇到yield,則return出生成的數,程式結束

用send的話,開始執行的時候,先接着上一次(return 4之後)執行,先把7指派給了res,然後執行next的作用,遇見下一回的yield,return出結果後結束。

6程式執行g.send(7),程式會從yield關鍵字那一行繼續向下運作,send會把7這個值指派給res變量

7.由于send方法中包含next()方法,是以程式會繼續向下運作執行print方法,然後再次進入while循環

8.程式執行再次遇到yield關鍵字,yield會傳回後面的值後,程式再次暫停,直到再次調用next方法或send方法。