考虑以下:
>>> 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)
另一个选择是创建一个闭包:
>>> 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)
| 归档时间: |
|
| 查看次数: |
1511 次 |
| 最近记录: |