>백엔드 개발 >파이썬 튜토리얼 >For 루프의 람다는 왜 마지막 값만 사용합니까?

For 루프의 람다는 왜 마지막 값만 사용합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-18 06:17:10231검색

Why Do My Lambdas in a For Loop Only Use the Last Value?

For 루프의 람다는 마지막 값만 취합니다

다음 코드에서는

options=["INFO", "WARNING", "DEBUG"]

for i in range(len(options)):
    option=options[i]
    __cMenu.add_command(
        label="{}".format(option), 
        command=lambda: self.filter_records(column, option)
   )

여러 람다가 생성되고 저장됩니다. 이러한 람다는 지역 변수 옵션의 다양한 값을 캡처해야 합니다. 그러나 이러한 람다를 사용하면 모두 옵션이 루프에서 취하는 마지막 값인 "DEBUG"로 설정된 것처럼 동작합니다.

이 문제는 함수 본문의 이름 평가 타이밍으로 인해 발생합니다. . 제공된 코드에서는 함수가 실행될 때 이름이 평가됩니다. 결과적으로 루프에서 생성된 람다는 실행 시 모두 동일한 옵션 값인 "DEBUG"를 참조합니다.

이 문제를 회피하려면 다음과 같이 수정하면 됩니다.

__cMenu.add_command(label="{}".format(option),
    command=lambda opt=option: self.filter_records(column, opt))

option=option을 람다 함수의 인수로 도입함으로써 각 람다는 생성 시의 값에 의존하지 않고 생성 시 option의 올바른 값을 캡처합니다. 실행 시간. 이렇게 하면 각 람다가 원하는 옵션 값에 따라 작동합니다.

위 내용은 For 루프의 람다는 왜 마지막 값만 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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