lambda中的self传递给自由函数

时间:2014-10-26 19:29:27

标签: python python-2.7

我对以下代码的工作原理感到困惑。 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

如果是这样,为什么?

1 个答案:

答案 0 :(得分:0)

因为Python中的lambda是正确的"闭包时,任何外部变量引用都将在调用lambda时进行评估,而不是在定义它时进行评估。