>백엔드 개발 >파이썬 튜토리얼 >내 Lambda 함수가 항상 \'5\'를 인쇄하는 이유는 무엇입니까? Python에서 변수 캡처 가이드.

내 Lambda 함수가 항상 \'5\'를 인쇄하는 이유는 무엇입니까? Python에서 변수 캡처 가이드.

Susan Sarandon
Susan Sarandon원래의
2024-10-26 17:26:03469검색

Why Does My Lambda Function Always Print

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.