我对以下代码的工作原理感到困惑。 self.param什么时候评估?这里有封闭功能吗?
from collections import namedtuple
T = namedtuple("T","a b")
def validate(condition):
t = T(1, 2)
return condition(t)
class C:
def __init__(self, param):
self.param = param
def test(self):
condition = lambda v: v.a==1 and v.b==2 if self.param else v.b!=2
print(validate(condition))
c = C(True)
c.test()
我应该写作:
condition = lambda v, param=self.param: v.a==1 and v.b==2 if param else v.b!=2
如果是这样,为什么?
答案 0 :(得分:0)
因为Python中的lambda是正确的"闭包时,任何外部变量引用都将在调用lambda时进行评估,而不是在定义它时进行评估。