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

lambda函数和Python中的函数列表

lambda函数和Python中的函数列表

慕容森 2021-03-07 09:09:23
我有一系列函数,例如:>>> def f():...     print "f"... >>> def g():...     print "g"... >>> c=[f,g]然后,我尝试创建两个lambda函数:>>> i=0>>> x=lambda: c[i]()>>> i+=1>>> y=lambda: c[i]()然后,给他们打电话:>>> x()g>>> y()g为什么lambda中的c [i]是相同的?
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

这是因为lambda函数i在运行时获取全局变量的值:


>>> i = 0

>>> x=lambda z = i : c[z]() #assign the current value of `i` to a local variable inside lambda

>>> i+=1

>>> y =lambda z = i : c[z]()

>>> x()

f

>>> y()

g


查看完整回答
反对 回复 2021-03-27
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

在Python中,闭包不捕获实际值,而是捕获名称空间。因此,当您i在函数内部使用时,实际上是在封闭范围内查找的。并且那里的价值已经改变。


您不需要所有这些lambda和列表都可以看到此内容。


>>> x = 1

>>> def f():

...   print(x)

...

>>> x = 2

>>> def g():

...   print(x)

...

>>> g()

2

>>> f()

2


查看完整回答
反对 回复 2021-03-27
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

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