-
慕的地10843
gen_func函数返回一个列表(包含函数的列表),列表的每一项是一个函数(该函数接受一个参数i,返回2*i)所以,result为[4, 4, 4, 4]
-
慕神8447489
>>> 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]
>>>不要覆盖默认参数值
-
眼眸繁星
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)]
-
慕的地6264312
[labmda i:i*2 for i in range(4)]正确写法应该是: [(lambda i:i*2) for i in range(4)]即lambda的函数体只能是一个可以放在函数的return后面的表达式.所以前面的i为lambda的函数内的局部变量, 后面的i为lambda函数外面的更大作用域内的变量.总之是函数的作用域和函数的生命周期的问题.