Lambda 함수에서 변수 캡처: 클로저
람다 함수에서는 바깥쪽 범위에서 변수를 캡처하는 것이 일반적인 문제입니다. 람다 함수는 기본적으로 바깥쪽 범위의 변수를 참조합니다. 그러나 이러한 참조의 해결은 정의 중이 아니라 실행 시 발생합니다.
루프를 사용하여 5개의 버튼을 생성하고 각 버튼에 명령을 바인딩하여 람다 함수:
<code class="python">for i in range(5): make_button = Tkinter.Button(frame, text ="make!", command= lambda: makeId(i))</code>
이 코드는 클릭한 버튼의 인덱스를 인쇄할 것으로 예상할 수 있습니다. 그러나 i의 값은 루프가 끝날 때 i가 5로 증가된 후 캡처되기 때문에 항상 "5"를 인쇄합니다.
해결책: 클로저 사용
이 문제를 해결하려면 클로저를 사용할 수 있습니다. 클로저는 바깥쪽 범위에서 변수를 캡처하고 정의될 때 초기화하는 함수입니다. 이를 통해 각 버튼에 대해 올바른 i 값을 캡처할 수 있습니다.
<code class="python">make_button = Tkinter.Button(frame, text ="make!", command= lambda i=i: makeId(i))</code>
람다 함수 내에서 i=i를 할당하여 루프의 현재 i 값으로 초기화되는 로컬 변수를 생성합니다. . 이렇게 하면 각 버튼이 의도한 인덱스에 대한 자체 참조를 갖게 됩니다.
위 내용은 내 Lambda 함수가 항상 '5'를 인쇄하는 이유는 무엇입니까? Python에서 변수 캡처 가이드.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!