def gen_func():
return [lambda i:i*2 for i in range(4)]
result = [func(2) for func in gen_func()]请问result结果是什么,WHY?
4 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
gen_func函数返回一个列表(包含函数的列表),列表的每一项是一个函数(该函数接受一个参数i,返回2*i)
所以,result为[4, 4, 4, 4]
慕神8447489
TA贡献1780条经验 获得超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] >>>
不要覆盖默认参数值
眼眸繁星
TA贡献1873条经验 获得超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)]
慕的地6264312
TA贡献1817条经验 获得超6个赞
[labmda i:i*2 for i in range(4)]
正确写法应该是: [(lambda i:i*2) for i in range(4)]
即lambda的函数体只能是一个可以放在函数的return后面的表达式.
所以前面的i为lambda的函数内的局部变量, 后面的i为lambda函数外面的更大作用域内的变量.
总之是函数的作用域和函数的生命周期的问题.
- 4 回答
- 0 关注
- 320 浏览
添加回答
举报
0/150
提交
取消