亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python楊輝三角涉及到的生成器執行順序問題

python楊輝三角涉及到的生成器執行順序問題

秋水丶 2016-11-08 20:57:54
def?triangles(): ?b?=?[1] ????while?True: ????????yield?b ????????b?=?[1]?+?[b[i]?+?b[i+1]?for?i?in?range(len(b)-1)]?+?[1] n?=?0 for?t?in?triangles(): ????print(t) ????n?=?n?+?1 ????if?n?==?10: ????????break看了相關資料 遇到yield語句返回,那么只輸出第一行的話,程序是執行b = [1] 一直往下到了yield b 就會返回嗎?進行第二行的時候 是順著剛才yield b 的下一句即b?=?[1]?+?[b[i]?+?b[i+1]?for?i?in?range(len(b)-1)]?+?[1]執行嗎?小白對于這個函數不斷執行的順序有點暈,請大神不吝賜教,謝謝。
查看完整描述

1 回答

?
原來我叫小土慕課網給我改了名字

TA貢獻2條經驗 獲得超1個贊

yield使函數triangles返回一個迭代器,每次遍歷的時候執行函數。執行流程為:

迭代1:b=[1] ?yield=b

迭代2:?b?=?[1]?+?[b[i]?+?b[i+1]?for?i?in?range(len(b)-1)]?+?[1] ? ?yield=b

迭代3:b?=?[1]?+?[b[i]?+?b[i+1]?for?i?in?range(len(b)-1)]?+?[1] ? ?yield=b

。。。


在 for 循環執行時,每次循環都會執行 ?函數內部的代碼,執行到 yield b 時,fab 函數就返回一個迭代值,下次迭代時,代碼從 yield b 的下一條語句繼續執行,而函數的本地變量看起來和上次中斷執行前是完全一樣的,于是函數繼續執行,直到再次遇到 yield。

查看完整回答
反對 回復 2016-11-08
  • 秋水丶
    秋水丶
    謝謝,也就是說while true:在不停的循環 里面的yield b則變成了每一次迭代的分割點。最后那句 函數的本地變量看起來和上次中斷執行前是完全一樣的 不太懂,本地變量是什么意思啊?
  • 1 回答
  • 0 關注
  • 1927 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號