[問題] lambda 在迴圈內設定的問題
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), 來自: 111.243.121.200 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1648437735.A.C3E.html
推
03/28 12:54,
2年前
, 1F
03/28 12:54, 1F
→
03/28 12:54,
2年前
, 2F
03/28 12:54, 2F
→
03/28 12:56,
2年前
, 3F
03/28 12:56, 3F
→
03/28 12:56,
2年前
, 4F
03/28 12:56, 4F
原來如此,感謝。
→
03/28 23:37,
2年前
, 5F
03/28 23:37, 5F
→
03/28 23:37,
2年前
, 6F
03/28 23:37, 6F
→
03/28 23:37,
2年前
, 7F
03/28 23:37, 7F
→
03/28 23:37,
2年前
, 8F
03/28 23:37, 8F
→
03/28 23:37,
2年前
, 9F
03/28 23:37, 9F
→
03/28 23:37,
2年前
, 10F
03/28 23:37, 10F
推
03/29 00:19,
2年前
, 11F
03/29 00:19, 11F
推
03/29 01:05,
2年前
, 12F
03/29 01:05, 12F
→
03/29 01:06,
2年前
, 13F
03/29 01:06, 13F
是的,看了Da大給的範例想通了。
透過把變數指向的位址印出來證實。
https://www.ideone.com/T4bUMs
python在改動變數(reference)指向的值時,
會產生一個新物件,並把新物件的位址更新到原變數。
※ 編輯: pshuang (111.243.112.208 臺灣), 03/29/2022 09:01:34
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):