7.7 如何在lambda定义的匿名函数中绑定特定的变量
- 如下函数,我们判断应该会返回15,25,但实际是25,25
>>> x =10
>>> a = lambda y:x+y
>>> x =20
>>> b = lambda y:x+y
>>> a(5)
25
>>> b(5)
25
>>>
- 原因是lambda表达式中用的x是自由变量,在运行时才进行绑定,而不是在定义时绑定。如果想要得到15 25,我们要使用如下的顺序
>>> x =10
>>> a = lambda y:x+y
>>> a(5)
15
>>> x =20
>>> b = lambda y:x+y
>>> b(5)
25
>>>
- 如果想要匿名函数在定义时候就绑定变量,并保持值不变,那么需要将值作为默认参数实现,如下
>>> x =10
>>> a = lambda y,x=x:x+y
>>> x =20
>>> b = lambda y,x=x:x+y
>>> a(5)
15
>>> b(5)
25
>>>
网友评论