2013-11-27 13 views
9

は、次のことを考えてみましょう:Pythonのラムダ式

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

私はaが変更されたときに変更しないfためにしたいと思います。これを行う最も良い方法は何ですか? lambdaを定義するときは、キーワード引数にaをバインドする必要が

答えて

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

:今

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