Lambda 함수의 클로저 캡처 이해
Python 클로저는 정의된 포함 범위의 상태를 캡처합니다. 특히 람다 함수 내에서 참조되지만 해당 범위에 없는 변수의 값을 캡처합니다.
제공된 예에서 람다 함수는 루프가 실행될 때 다른 값이 할당되는 변수 i를 캡처합니다. 그러나 람다 함수는 i가 가리키는 개체에 대한 참조를 캡처하지 않습니다. 대신 생성 당시 i 값을 캡처합니다.
이 동작은 adders[1](3)을 호출할 때 6의 예상치 못한 결과를 설명합니다. 정수 객체에 대한 참조에 대한 기대에도 불구하고 람다 함수는 i에 할당된 최종 값인 값 3을 캡처합니다.
각 람다 함수에서 i의 현재 값을 보존하는 원하는 동작을 달성하려면 , 인수 기본값이라는 기술을 사용할 수 있습니다. 람다 함수에 기본 인수를 제공하면 생성 당시의 i 값이 고정됩니다. 예:
for i in [0, 1, 2, 3]: adders[i] = lambda a, i=i: i+a
이 경우 매개 변수 i의 기본값은 현재로 설정됩니다. i의 가치. 람다 함수가 호출되면 생성 중에 캡처된 i 값을 사용합니다.
이 방법을 사용하면 adders 배열의 각 람다 함수가 의도한 i 값을 캡처하여 예상되는 결과를 생성할 수 있습니다. 호출 시 출력됩니다.
위 내용은 Python Lambda 함수가 참조가 아닌 값을 캡처하는 이유는 무엇이며 이 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!