提问
x = 10
a = lambda y: x+y
x = 20
b = lambda y: x+y
print(a(10))
print(b(10))
现在请问自己一个问题,a(10)和b(10)的结果是多少?如果觉得结果是20和30的话,那就错了:
a(10) -> 30
b(10) -> 30
原因
这里的问题在于lambda表达式中用到的x是一个自由变量,在运行时才进行绑定而不是定义的时候绑定。因此,lambda表达式中x的值应该是在执行时确定的,执行时x的值是多少就是多少
解决方案
如果希望匿名函数可以在定义的时候绑定变量,并保持值不变,那么可以将那个值作为默认参数实现:
x = 10
a = lambda y, x=x: x+y
x = 20
b = lambda y, x=x: x+y
print(a(10))
# 20
print(b(10))
#30