close

funs = []
for c in range(3):
    a = lambda x: x + c
    funs.append(a)

for f in funs:
    print(f(1))

認為結果會是
1
2
3

但是實際上輸出卻為
3
3
3

這是為什麼, 因為 lamdba 為 runtime binding, 而非 definition time binding.

若要輸出結果為預期的
3
3
3

將程式改成如下
funs = []
for c in range(3):
    a = lambda x, t=c: x + t
    funs.append(a)

for f in funs:
    print(f(1))

arrow
arrow
    文章標籤
    Python
    全站熱搜
    創作者介紹
    創作者 wsunccake 的頭像
    wsunccake

    wsunccake的隨手記事

    wsunccake 發表在 痞客邦 留言(0) 人氣()