2017-11-28 3 views
1

반환 값 목록을이 값을 반환하는 함수 목록으로 변환하려고합니다. 값 목록을이 값을 반환하는 함수 목록으로 변환하는 방법

lst = [1, 2] 
funcs = [lambda: x for x in lst] 

은 동일합니다 :

x = 2 
funcs = [lambda: x, lambda: x] 

그러나 나는 얻기 위해 노력하고 있어요 : 왜 이런 일

funcs = [lambda: 1, lambda 2] 

question은 설명하지만, 할 수있는 방법을 제공하지 않습니다 그것.

이것을 달성 할 방법이 있습니까?

답변

4

이 작동합니다 :

[lambda x=x: x for x in lst] 

설명 :이 현재 루프 매개 변수 x에 설정된 기본 값으로 초기화됩니다 새로운 함수 매개 변수 x을 만듭니다. 매개 변수없이 메서드를 호출하면 기본값이 반환됩니다.

나는 덜 혼란하게 다른 이름을 사용하는 것이 좋습니다 :

[lambda result=i: result for i in lst] 

또 다른 방법은 반환 중첩 된 함수를 정의하고 자신의 lambda -like 함수를 작성하는 것입니다.

2

당신은 사용할 수 있습니다 기능이 더 복잡한 경우

def f(x): 
    return lambda: x 

funcs = [f(x) for x in lst] 

이 방법은 특히 유용 할 수 있습니다, 여기 당신이 f의 몸에 임의의 함수 정의를 넣을 수 있기 때문이다.