3
가능한 중복 : 나는 사전에 여러 람다 함수를두고이 파이썬 코드가
What do (lambda) function closures capture in Python?닫기 변수
:
dictfun = dict()
for txt in ("a", "b", "c"):
dictfun[txt] = lambda: "function " + txt
그 기능 단지 호출 된 인수가있는 문자열을 반환합니다.
나는 등 dictfun["b"]()
에 대한 function b
하고, dictfun["a"]()
에 대한 function a
같은 출력을 볼 것으로 예상하지만, 이것은 내가 무엇을 얻을 :
>>> dictfun["a"]()
'function c'
>>> dictfun["b"]()
'function c'
>>> dictfun["c"]()
'function c'
모두가 마지막으로 설정 한 값, 즉에 txt
을 평가하는 것이 나타납니다 현재 값. 한마디로, 변수는 람다에 닫히지 않습니다. 난이 작업을 수행 할 수 있습니다
>>> txt = "a"
>>> dictfun["c"]()
'function a'
은 어떻게 예상 출력을 얻기 위해 람다 함수에 txt
을 닫을 수 있을까?
txt
의 값을 설정할 수 있습니다
가하는 http://stackoverflow.com/questions/2295290/what-do-lambda-function-closures-capture -in-python이 질문에 대답합니까? 듀플 (dupe)처럼 보입니다. – ThiefMaster
@ThiefMaster : 그렇습니다. 여기서 제안한 것과 같은 방법을 사용합니다. –
D' oh ... 질문이 정확히 똑같지는 않았지만 사실 내 질문에 대한 대답이있었습니다. 어쨌든 받아 들일 수있는 것은 아니며 문제는 정확한 목표에 도달하는 대신 클로저를 이해하는 것입니다. – etuardu