4 回答

TA貢獻(xiàn)1785條經(jīng)驗 獲得超8個贊
gen_func函數(shù)返回一個列表(包含函數(shù)的列表),列表的每一項是一個函數(shù)(該函數(shù)接受一個參數(shù)i,返回2*i)
所以,result為[4, 4, 4, 4]

TA貢獻(xiàn)1780條經(jīng)驗 獲得超1個贊
>>> def gen_func() :... return [lambda i=i:i*2 for i in range(4)] ...>>> [func(2) for func in gen_func()] [4, 4, 4, 4] >>> [func() for func in gen_func()] [0, 2, 4, 6] >>>
不要覆蓋默認(rèn)參數(shù)值

TA貢獻(xiàn)1873條經(jīng)驗 獲得超9個贊
In [38]: def gen_func():
return [lambda i,j=i:(i,j) for j in range(4)]
....:
In [39]: result = [func(2) for func in gen_func()]
In [40]: print result
[(2, 3), (2, 3), (2, 3), (2, 3)]

TA貢獻(xiàn)1817條經(jīng)驗 獲得超6個贊
[labmda i:i*2 for i in range(4)]
正確寫法應(yīng)該是: [(lambda i:i*2) for i in range(4)]
即lambda的函數(shù)體只能是一個可以放在函數(shù)的return后面的表達(dá)式.
所以前面的i為lambda的函數(shù)內(nèi)的局部變量, 后面的i為lambda函數(shù)外面的更大作用域內(nèi)的變量.
總之是函數(shù)的作用域和函數(shù)的生命周期的問題.
- 4 回答
- 0 關(guān)注
- 357 瀏覽
添加回答
舉報