Python lambda表达式

lau*_*urt 9 python lambda

考虑以下:

>>> a=2
>>> f=lambda x: x**a
>>> f(3)
9
>>> a=4
>>> f(3)
81
Run Code Online (Sandbox Code Playgroud)

我想f不要改变什么时候a改变.最好的方法是什么?

Mar*_*ers 13

a定义时需要绑定到关键字参数lambda:

f = lambda x, a=a: x**a
Run Code Online (Sandbox Code Playgroud)

现在a是本地(绑定为参数)而不是全局名称.

演示:

>>> a = 2
>>> f = lambda x, a=a: x**a
>>> f(3)
9
>>> a = 4
>>> f(3)
9
Run Code Online (Sandbox Code Playgroud)


geo*_*org 6

另一个选择是创建一个闭包:

>>> a=2
>>> f = (lambda a: lambda x: x**a)(a)
>>> f(3)
9
>>> a=4
>>> f(3)
9
Run Code Online (Sandbox Code Playgroud)

当您有多个参数时,这尤其有用:

 f = (lambda a, b, c: lambda x: a + b * c - x)(a, b, c)
Run Code Online (Sandbox Code Playgroud)

甚至

 f = (lambda a, b, c, **rest: lambda x: a + b * c - x)(**locals())
Run Code Online (Sandbox Code Playgroud)