> 백엔드 개발 > 파이썬 튜토리얼 > 변경 가능한 기본 인수를 사용하여 Python 함수에 대한 후속 호출이 예기치 않은 결과를 생성하는 이유는 무엇입니까?

변경 가능한 기본 인수를 사용하여 Python 함수에 대한 후속 호출이 예기치 않은 결과를 생성하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-03 19:44:42
원래의
593명이 탐색했습니다.

Why Do Subsequent Calls to a Python Function with a Mutable Default Argument Produce Unexpected Results?

기본 인수 바인딩 이상

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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