다음 코드에서는
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!