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看了相關資料 遇到y(tǒng)ield語句返回,那么只輸出第一行的話,程序是執(zhí)行b = [1] 一直往下到了yield b 就會返回嗎?進行第二行的時候 是順著剛才yield b 的下一句即b?=?[1]?+?[b[i]?+?b[i+1]?for?i?in?range(len(b)-1)]?+?[1]執(zhí)行嗎?小白對于這個函數不斷執(zhí)行的順序有點暈,請大神不吝賜教,謝謝。
1 回答

原來我叫小土慕課網給我改了名字
TA貢獻2條經驗 獲得超1個贊
yield使函數triangles返回一個迭代器,每次遍歷的時候執(zhí)行函數。執(zhí)行流程為:
迭代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 循環(huán)執(zhí)行時,每次循環(huán)都會執(zhí)行 ?函數內部的代碼,執(zhí)行到 yield b 時,fab 函數就返回一個迭代值,下次迭代時,代碼從 yield b 的下一條語句繼續(xù)執(zhí)行,而函數的本地變量看起來和上次中斷執(zhí)行前是完全一樣的,于是函數繼續(xù)執(zhí)行,直到再次遇到 yield。
添加回答
舉報
0/150
提交
取消