Python Lambda 함수 클로저 캡처는 무엇입니까?
Python 람다 함수 클로저로 작업할 때는 캡처 동작을 이해하는 것이 중요합니다. 클로저는 클로저 내에서 사용되는 둘러싸는 범위의 변수 값을 캡처합니다. 그러나 이 캡처가 발생하는 방식은 놀랄 수 있습니다.
이를 설명하기 위해 다음 코드를 고려하십시오.
adders = [None, None, None, None] for i in [0, 1, 2, 3]: adders[i] = lambda a: i + a print(adders[1](3))
이 코드에서는 다음을 수행하는 람다 함수 목록을 생성합니다. 단일 입력을 입력하고 여기에 상수 값을 추가합니다. 상수 값은 함수 생성 중에 초기에 i 값으로 설정됩니다. 그러나 클로저 목록을 조사해 보면 놀랍게도 모두 i의 최종 값을 참조하여 예상치 못한 6의 출력이 발생한다는 것을 알 수 있습니다.
이 동작은 클로저가 i의 값을 캡처한다는 사실에서 비롯됩니다. 참조가 아닌 변수입니다. 결과적으로 클로저 생성 후 i 값이 변경되면 클로저는 마지막으로 캡처한 값을 계속 참조합니다.
현재 값 캡처
캡처하려면 i의 현재 값에 대해 "더미 매개변수" 기술이라는 트릭을 사용할 수 있습니다. 캡처하려는 변수와 동일한 이름의 매개변수를 선언하고 해당 변수의 기본값을 제공함으로써 클로저가 현재 값을 캡처하도록 강제합니다.
for i in [0, 1, 2, 3]: adders[i] = lambda a, i=i: i + a # <-- Note the dummy parameter with a default value print(adders[1](3)) # Output: 4
이 기술을 사용하면 클로저는 생성 당시 i의 값을 캡처하여 나중에 i에 대한 변경이 클로저의 동작에 영향을 미치지 않도록 보장합니다.
위 내용은 Python Lambda 함수 클로저는 실제로 어떤 변수를 캡처합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!