推 DaOppaiLoli: 這應該是 Scope 的關係 03/28 12:54
→ DaOppaiLoli: 就算寫成一般 Function 也會有一樣的情況,i 對 lam 03/28 12:56
→ DaOppaiLoli: bda 來說是 Global 但 x 對 lambda 來說是 Local 03/28 12:56
原來如此,感謝。
→ ck574b027: python是用reference(簡稱位置)在運作的,你說的「 03/28 23:37
→ ck574b027: 當下的i」只是i的位置。又因python改變位置需要透過as 03/28 23:37
→ ck574b027: signment,而i在for並沒有發生這種事,只是在他的位 03/28 23:37
→ ck574b027: 置更新,所以全部lambda都拿著同個i。你可以不要用lis 03/28 23:37
→ ck574b027: t comprehension,把第一個例子的[]改成(),結果就會 03/28 23:37
→ ck574b027: 跟第二個一樣,因為generator等於在for才建立lambda 03/28 23:37
推 poototo: generator也是閉包把local的i讓lambda記住才yield出去 03/29 00:19
推 poototo: []的例子類似js迴圈的var會共用汙染 03/29 01:05
→ poototo: 也就是ck大所說的,都去同一addr取值 03/29 01:06
是的,看了Da大給的範例想通了。
透過把變數指向的位址印出來證實。
https://www.ideone.com/T4bUMs
python在改動變數(reference)指向的值時,
會產生一個新物件,並把新物件的位址更新到原變數。
※ 編輯: pshuang (111.243.112.208 臺灣), 03/29/2022 09:01:34