> 백엔드 개발 > 파이썬 튜토리얼 > Python 루프에서 생성된 함수가 모두 동일한 값을 반환하는 이유는 무엇입니까?

Python 루프에서 생성된 함수가 모두 동일한 값을 반환하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-22 01:57:14
원래의
656명이 탐색했습니다.

Why Do Functions Created in a Python Loop All Return the Same Value?

루프의 함수 및 람다 생성 이상

아래 코드 조각에서 볼 수 있듯이 루프 내에서 함수를 생성하려고 하면 이상한 현상이 발생합니다. 문제가 발생합니다:

functions = []

for i in range(3):
    def f():
        return i
    functions.append(f)
로그인 후 복사

마찬가지로 Lambdas:

functions = []

for i in range(3):
    functions.append(lambda: i)
로그인 후 복사

이러한 함수는 고유한 값(0, 1, 2)을 출력할 것으로 예상하지만 모든 함수는 결국 동일한 값(2)을 생성합니다.

설명 및 해결책

이 현상은 늦은 변수 바인딩으로 인해 발생합니다. Python 함수에서는 변수가 호출될 때 해결됩니다. 즉, 루프 후에 함수가 호출될 때 i 값이 이미 2로 설정되어 있습니다. 이를 수정하기 위해 f(i=i) 구문을 도입하여 초기 바인딩을 사용합니다. . 여기서 i 인수의 기본값은 정의 시점에 설정되어 초기 바인딩이 발생합니다.

def f(i=i):
    return i
로그인 후 복사

또는 클로저와 "함수 팩토리"를 사용하는 보다 복잡한 접근 방식은 다음과 같이 조기 바인딩을 보장합니다. 음:

def make_f(i):
    def f():
        return i
    return f
로그인 후 복사

루프 내에서 def 문 대신 f = make_f(i)를 활용할 수 있습니다.

위 내용은 Python 루프에서 생성된 함수가 모두 동일한 값을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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