2013-11-27 2 views
9

는 다음과 같은 고려 :파이썬 람다 식

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

나는 a가 변경 될 때 변경하지 않는 f에 대한 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? lambda을 정의 할 때

답변

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을 결합해야합니다

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