"최소 경악"과 변경 가능한 기본 인수
변경 가능한 기본 인수를 사용한 Python의 놀라운 동작은 수많은 개발자를 당황하게 했습니다. 다음을 고려하십시오.
def foo(a=[]): a.append(5) return a
직관적으로 이 함수는 매개변수 없이 호출할 때 항상 [5]만 포함하는 목록을 반환할 것으로 예상할 수 있습니다. 그러나 이 가정은 실제 출력에 의해 깨졌습니다.
>>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] >>> foo() [5, 5, 5, 5]
그래, 무슨 일이 일어나고 있는 걸까요?
핵심은 Python의 일류 함수 개체에 있습니다. 함수가 정의되면 기본 인수 평가를 포함하여 즉시 평가됩니다. foo의 경우 a의 기본값은 빈 목록으로 평가됩니다. 그러나 이 목록은 함수 객체 자체 내에 저장되므로 후속 호출에서 변경할 수 있습니다.
C와 같은 언어와 달리 Python의 함수 매개변수는 컴파일 타임에 평가되는 정적 변수가 아닙니다. 대신 시간이 지남에 따라 변경될 수 있는 개체에 바인딩됩니다. 함수 개체의 "멤버 데이터" 개념은 변경 가능한 기본 인수로 관찰되는 놀라운 동작을 설명합니다.
effbot이 Python의 기본 매개변수 값에서 언급한 것처럼 이 동작은 논리적이며 다른 개체가 작동하는 방식과 일치합니다. :
"모든 개체는 한 호출에서 다른 호출로 상태가 변경될 수 있습니다. 왜 함수가 달라야 합니까?"
따라서 이 동작은 처음에는 놀라울 수도 있지만, 궁극적으로는 Python의 객체 지향 특성과 변경 가능한 객체 동작에 대한 기대에 맞춰 "최소 놀라움"의 원칙을 따릅니다.
위 내용은 Python의 변경 가능한 기본 인수 동작이 왜 그렇게 놀라운 것처럼 보입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!