[問題] lambda 在迴圈內設定的問題

作者: pshuang (中山先生忠實信徒-我愛蘿)   2022-03-28 11:22:12
Os環境:Win7
Py版本: 3.8.10
lambda關鍵字,如果在迴圈內設定,又沒帶參數,
感覺結果想不通。想請問原因。
code如下:
#
作者: DaOppaiLoli (大歐派蘿莉)   2022-03-28 12:54:00
這應該是 Scope 的關係https://www.ideone.com/txytbg就算寫成一般 Function 也會有一樣的情況,i 對 lambda 來說是 Global 但 x 對 lambda 來說是 Local
作者: ck574b027 (荒圍!定厝!賊!妹!)   2022-03-28 23:37:00
python是用reference(簡稱位置)在運作的,你說的「當下的i」只是i的位置。又因python改變位置需要透過assignment,而i在for並沒有發生這種事,只是在他的位置更新,所以全部lambda都拿著同個i。你可以不要用list comprehension,把第一個例子的[]改成(),結果就會跟第二個一樣,因為generator等於在for才建立lambda
作者: poototo (poototo)   2022-03-29 00:19:00
generator也是閉包把local的i讓lambda記住才yield出去[]的例子類似js迴圈的var會共用汙染也就是ck大所說的,都去同一addr取值

Links booklink

Contact Us: admin [ a t ] ucptt.com