루프 내에서 함수나 람다를 생성할 때 다음 개념을 고려하는 것이 중요합니다. 늦은 바인딩. 주어진 예에서:
functions = [] for i in range(3): def f(): return i functions.append(f)
각 함수는 루프가 완료된 후 가능한 한 늦게 i 값을 찾습니다. 결과적으로 모든 함수는 i의 최종 값인 2를 반환합니다.
이 문제를 해결하고 0, 1, 2를 출력하는 세 가지 고유한 함수를 얻으려면 조기 바인딩을 강제해야 합니다. 이는 기본 매개변수를 사용하여 달성할 수 있습니다.
functions = [] for i in range(3): def f(i=i): # Default parameter for i return i functions.append(f)
이 경우 기본 매개변수 i는 호출 시간이 아닌 정의 시간에 평가되어 각 함수가 올바른 i 값을 사용하는지 확인합니다.
또는 함수 팩토리를 사용하여 초기 바인딩이 있는 함수를 생성할 수 있습니다.
def make_f(i): def f(): return i return f functions = [] for i in range(3): functions.append(make_f(i))
make_f 함수는 i가 일찍 바운드의 올바른 값입니다.
위 내용은 루프에서 생성된 함수가 동일한 값을 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!