慕妹3146593
2018-07-10 14:10:58
求教一下表達式各變量是怎么變化的,以及結果,尤其是n怎么變呢?fun = [(lambda n : i + n) for i in range(10)]
2 回答

翻翻過去那場雪
TA貢獻2065條經(jīng)驗 獲得超14個贊
這是 python 中為數(shù)不多的“怪事”之一
fun = [(lambda n: i+n) for i in range(10)] # 等同于fun = [(lambda n: 9+n) for _ in range(10)]
因為 lambda 內(nèi)的參數(shù) i 在運行時才能確定,不是在聲明時確定。
最后 fun 保存了含有 10 個元素的數(shù)組,每一個元素都是 lambda 方法,該方法等于下面的 lambda_item 函數(shù)
def lambda_item(n): return 9 + n
如果整個表達式用 python 代碼來詮釋的話,可以是這樣
fun = []for i in range(10): fun.append((lambda n: 9+n))
另一個讓新人迷惑的是
a = [[0]] * 3a[0].append(1)print(a)
打印出
[[0,1], [0,1], [0,1]]

慕森卡
TA貢獻1806條經(jīng)驗 獲得超8個贊
lambda函數(shù)是里面的i是一個全局變量i,但是由于lambda函數(shù)里面所有的值只有在運行時確定。也就是當我們:
[(lambda n : i + n) for i in range(10)][1](10)
lambda里面的i已經(jīng)迭代到 9,所以就變成了如fun列表就變成了如下:
[lambda n: 9 + n,lambda n: 9 + n,lambda n: 9 + n,lambda n: 9 + n,lambda n: 9 + n,lambda n: 9 + n,lambda n: 9 + n,lambda n: 9 + n,lambda n: 9 + n]
- 2 回答
- 0 關注
- 638 瀏覽
添加回答
舉報
0/150
提交
取消