기본 인수가 실행 대신 함수 정의에서 바인딩되는 Python에서 foo 함수의 예기치 않은 동작은 다음과 같습니다. 많은 사람들을 당황하게 했습니다. 어떤 사람들은 그것을 프로그래밍 가짜라고 생각하기도 합니다. 그러나 이러한 동작은 일급 기능을 갖춘 언어인 Python의 본질에 뿌리를 둔 타당한 근거를 가지고 있습니다.
Python의 함수는 단순한 코드 블록이 아닙니다. 이는 정의 시 평가되는 객체입니다. 이 평가에는 함수 개체의 "멤버 데이터" 역할을 하는 바인딩 기본 인수가 포함됩니다. 결과적으로, 기본 인수에 대한 변경 사항은 객체의 상태 변경 사항이 유지되는 방식과 유사하게 함수 호출 전반에 걸쳐 유지됩니다.
설명하기 위해 메시지를 인쇄하고 빈 목록을 반환하는 함수 a를 생각해 보세요. 또 다른 함수 b는 기본값 a()를 갖는 단일 매개변수 x를 사용합니다. x를 지정하지 않고 b를 호출하면 x를 a 호출 결과에 바인딩하여 빈 목록을 반환합니다. 그러나 빈 목록은 b 내의 기본 인수로 저장되므로 b에 대한 후속 호출은 이 동일한 목록에 추가되어 첫 번째 호출에서는 [5]가 인쇄되고 두 번째 호출에서는 [5, 5]가 인쇄되는 관찰된 동작이 발생합니다. .
이 동작은 프로그램의 동작이 프로그래머가 합리적으로 기대하는 것과 일치해야 한다는 "최소 놀라움"의 원칙을 따릅니다. 이 경우 함수 객체가 정의되면 해당 기본 인수는 상태의 일부가 되며 해당 인수에 대한 모든 수정 사항은 후속 호출에 반영됩니다.
이 동작은 일부 사람들에게는 직관에 반하는 것처럼 보일 수 있지만 일관됩니다. Python의 디자인 철학으로 일급 객체로서의 기능은 더 큰 유연성을 허용하고 보다 객체 지향적인 프로그래밍 스타일을 장려합니다. 이 개념을 이해하면 프로그래머의 Python 기본 사항에 대한 이해가 향상되고 더욱 강력하고 효과적인 코드 개발이 촉진됩니다.
위 내용은 Python에서 변경 가능한 기본 인수가 예기치 않은 동작으로 이어지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!