为了账号安全,请及时绑定邮箱和手机立即绑定

关于Python匿名函数的问题

关于Python匿名函数的问题

Helenr 2018-07-16 15:40:38
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]


查看完整回答
反对 回复 2018-07-17
?
慕神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]
>>>

不要覆盖默认参数值

查看完整回答
反对 回复 2018-07-17
?
眼眸繁星

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)]


查看完整回答
反对 回复 2018-07-17
?
慕的地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函数外面的更大作用域内的变量.
总之是函数的作用域和函数的生命周期的问题.

查看完整回答
反对 回复 2018-07-17
  • 4 回答
  • 0 关注
  • 304 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信