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。
添加回答
舉報
0/150
提交
取消