2013-11-27 54 views
9

考虑以下几点:Python的lambda表达式

>>> a=2 
>>> f=lambda x: x**a 
>>> f(3) 
9 
>>> a=4 
>>> f(3) 
81 

我想为fa改变不改变。什么是最好的方法来做到这一点?

回答

6

另一种选择是创建一个封闭:

>>> a=2 
>>> f = (lambda a: lambda x: x**a)(a) 
>>> f(3) 
9 
>>> a=4 
>>> f(3) 
9 

,当你有一个以上的说法,这是特别有用:

f = (lambda a, b, c: lambda x: a + b * c - x)(a, b, c) 

甚至

f = (lambda a, b, c, **rest: lambda x: a + b * c - x)(**locals()) 
13

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

f = lambda x, a=a: x**a 

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

演示:

>>> a = 2 
>>> f = lambda x, a=a: x**a 
>>> f(3) 
9 
>>> a = 4 
>>> f(3) 
9