람다 함수에서 변수 캡처
루프 내에서 람다 함수를 사용할 때는 변수 범위를 이해하는 것이 중요합니다. 지역 변수를 복사하는 일반 함수와 달리 람다 함수는 이를 참조합니다.
주어진 코드를 고려하세요.
for m in ('do', 're', 'mi'):
funcList.append(lambda: callback(m))
여기서 람다 함수는 바깥쪽 범위에서 m 값을 캡처합니다. 그러나 루프가 완료된 후 m은 마지막 값('mi')을 유지합니다. 각 람다 함수가 호출되면 이 공유 m 변수를 참조하여 "mi"가 여러 번 출력됩니다.
이 문제를 극복하고 각 람다가 고유한 m 값을 캡처하도록 하려면 " 기본 인수":
for m in ('do', 're', 'mi'):
funcList.append(lambda m=m: callback(m))
m을 동일한 이름의 기본 매개변수로 만들어 각 람다는 자체 변수 인스턴스를 캡처하여 예상되는 출력을 보장합니다.
"할"
"re"
"mi"
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3