【发布时间】:2013-05-27 04:59:17
【问题描述】:
我有一个函数数组,例如:
>>> 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] 是一样的?
【问题讨论】:
-
解决这个问题的简单方法是首先不要创建无用的
lambdas。只需将这两行替换为x = c[i]和y = c[i],您将获得您想要的功能。写lambda: f()而不是f的唯一原因是将f粘贴到闭包命名空间中以便以后查找,而不是仅仅使用它。您不想在这里这样做,事实上这正是导致您的问题的原因。