기본 인수 바인딩 이상
Python의 기본 인수는 실행 대신 함수 정의에서 바인딩될 때 프로그래머를 당황하게 할 수 있습니다. 예를 들어 다음 함수를 고려해 보세요.
def foo(a=[]): a.append(5) return a
첫 번째 호출에 대해 단일 요소 [5]가 포함된 목록을 반환합니다. 그러나 후속 호출에서는 이 요소 수가 증가하여 예기치 않은 패턴이 발생합니다.
>>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5]
이 겉보기에 비논리적인 동작은 Python 함수가 일급 개체라는 기본 개념에서 비롯됩니다. 함수 정의 시 Python은 함수와 해당 기본 매개변수를 함수 개체의 "멤버 데이터"로 평가합니다. 결과적으로 이러한 매개변수는 일반 클래스 속성과 마찬가지로 함수 호출 전반에 걸쳐 상태를 유지합니다.
정의 시 이 바인딩에는 명확한 근거가 있습니다. 함수 정의의 모든 측면이 미리 해결되도록 보장한다는 것입니다. 함수 실행 시 바인딩이 수행된 경우 함수 시그니처는 바인딩의 일부가 정의 시 발생하고 일부는 호출 시 발생하는 "하이브리드"가 됩니다. 이러한 불일치로 인해 잠재적인 오류와 혼란이 발생할 수 있습니다.
정의 시 기본 인수를 바인딩함으로써 Python은 함수 개체의 무결성을 불변 엔터티로 유지합니다. 이 동작은 Python 함수 및 관련 기본 매개변수 작업을 위한 일관되고 이해하기 쉬운 프레임워크를 제공합니다.
위 내용은 변경 가능한 기본 인수를 사용하여 Python 함수에 대한 후속 호출이 예기치 않은 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!