python--lambda表达式

python--lambda表达式 lamda函数class Test: def __init__(self): self.name test def test(self,str): print(This is a test function) print(str) def test_lmd(self): lmdlambda: self.test(self.name) lmd() def test_get_local_var(self): var100 lmdlambda: print(var) lmd() if __name__ __main__: t Test() t.test_lmd() t.test_get_local_var()我们需要解释Python的lambda是一个闭包它会自动捕获在其定义时作用域内可访问的变量包括局部变量、全局变量、实例变量等无需显式声明捕获列表。这类似于C的[]按值捕获但实际上是按引用捕获还是按值捕获实际上Python中变量是对象的引用所以lambda捕获的是变量名引用其行为类似于C的按引用捕获。引用捕获的验证class Test: def __init__(self): self.name test def test(self,str): print(This is a test function) print(str) def test_lmd(self): lmdlambda: self.test(self.name) lmd() def test_get_local_var(self): var100 lmdlambda: print(var) lmd() def display(self,a): print(a) def verify_referece(self): var100 lmdlambda: self.display(var) var110 lmd() if __name__ __main__: t Test() t.test_lmd() t.test_get_local_var() t.verify_referece()为什么 lambda 不能包含赋值语句class Test: def __init__(self): self.name test def test(self,str): print(This is a test function) print(str) def test_lmd(self): lmdlambda: self.test(self.name) lmd() def test_get_local_var(self): var100 lmdlambda: print(var) lmd() def verify_referece(self): var100 lmdlambda: var10 lmd() print(var) # 110 if __name__ __main__: t Test() t.test_lmd() t.test_get_local_var() t.verify_referece()报错Python 中lambda被设计为创建简单的匿名函数只能包含一个表达式并且该表达式的值就是函数的返回值。常见的语句包括赋值语句x 1、x 1循环for、while条件分支if ... else但三元表达式a if cond else b是表达式return、import、def等而表达式是产生值的代码片段例如算术运算x 1函数调用print(x)三元表达式x if cond else y列表推导式[i for i in range(5)]所以var 10试图修改变量属于语句违反了 lambda 的规则。