Re: [問題] lambda 在迴圈內設定的問題
# 可用閉包讓子函數記住i
LL = [(lambda i: lambda:print(i))(i) for i in range(3)]
for L in LL:
L()
※ 引述《pshuang (中山先生忠實信徒-我愛蘿)》之銘言:
: Os環境:Win7
: Py版本: 3.8.10
: lambda關鍵字,如果在迴圈內設定,又沒帶參數,
: 感覺結果想不通。想請問原因。
: code如下:
: #--------------------無參數-----------------------
: l_l = [ lambda: print(i) for i in range(3) ]
: for l in l_l: l()
: 輸出結果:
: 2
: 2
: 2
: #--------------------帶參數---------------------
: l_l2 = [ lambda x = i: print(x) for i in range(3) ]
: for l in l_l2: l()
: 輸出結果:
: 0
: 1
: 2
: 請問,沒帶參數的場合,每次迴圈還是把當下的 i 傳給 print 不是嗎?
: 為甚麼輸出結果卻都是迴圈的最後一個值呢?
: 這是lambda的某種特性嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.89.24 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1648480279.A.5AC.html
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):