> 백엔드 개발 > 파이썬 튜토리얼 > Python Lambda 함수가 참조가 아닌 값을 캡처하는 이유는 무엇이며 이 문제를 어떻게 해결할 수 있습니까?

Python Lambda 함수가 참조가 아닌 값을 캡처하는 이유는 무엇이며 이 문제를 어떻게 해결할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-27 10:18:10
원래의
530명이 탐색했습니다.

Why Do Python Lambda Functions Capture Values, Not References, and How Can This Be Resolved?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿