2014-10-26 68 views
0

我很困惑,爲什麼下面的代碼工作。何時評估self.param?封閉功能在這裏?lambda中的自我傳遞給免費函數

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

因爲Python中的lambdas是「合適的」閉包,所以當lambda被調用時,不會定義任何外部變量引用。