> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 'example = list(...)'가 'TypeError: 'list' 개체를 호출할 수 없음'을 발생시키는 이유는 무엇입니까?

Python에서 'example = list(...)'가 'TypeError: 'list' 개체를 호출할 수 없음'을 발생시키는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-08 07:00:15
원래의
288명이 탐색했습니다.

Why Does

객체 이름: "example = list(...)"가 "TypeError: 'list' 객체를 호출할 수 없음"을 유발하는 이유

대화형 Python 세션에서 "example = list('easyhoss')" 코드를 사용하려고 하면 수수께끼 같은 오류가 발생합니다. "example"이 목록이 될 것이라는 튜토리얼의 기대와는 달리 "TypeError: 'list' object is not callable"이 발생합니다.

Shadowing: The Puzzle Solver

이 문제의 근본 원인은 내장된 "목록" 이름의 그림자에 있습니다. 처음에 "목록"은 내장 클래스를 나타냅니다. 그러나 "목록"에 값을 할당하면 목록의 인스턴스를 참조하는 해당 이름의 변수가 생성됩니다.

예를 들어 다음 코드를 실행하면:

example = list('easyhoss')
list = list('abc')
example = list('easyhoss')  # Error: 'list' is now an instance
로그인 후 복사

"목록"의 의미를 클래스에서 인스턴스로 효과적으로 변경합니다. 이로 인해 Python은 "목록" 이름을 검색할 때 인스턴스의 우선 순위를 지정하여 "TypeError"가 발생합니다.

네임스페이스 및 범위 지정: 핵심 개념

네임스페이스 이해 이 문제를 해결하려면 범위 지정이 중요합니다. Python은 본질적으로 사전인 네임스페이스에서 이름과 해당 개체를 구성합니다.

Python은 계층적 네임스페이스 구조를 가지고 있습니다. 이름에 접근할 때 Python은 로컬 네임스페이스를 먼저 확인합니다. 이름을 찾을 수 없으면 다음 상위 네임스페이스로 올라가서 모든 네임스페이스를 소진하고 NameError가 발생할 때까지 계속됩니다. 내장 함수와 클래스는 최상위 네임스페이스인 __builtins__에 있습니다.

그림자 및 해상도: 예

다음 코드를 고려하세요.

example = list("abc")  # Works fine
list = list("abc")
example = list("abc")  # TypeError
로그인 후 복사

"list"에 값을 할당한 후 Python은 로컬 네임스페이스에서 "list"를 검색합니다. 그곳에서 인스턴스를 찾았으므로 더 높은 수준의 네임스페이스로 진행하지 않고 오류가 발생합니다.

함정 방지: 모범 사례

섀도잉을 방지하려면 적절한 기능을 보장하려면 이름 섀도잉을 강조하는 IDE를 사용하는 것이 좋습니다. 또한 기본 제공 이름은 프로그램 전체에서 공유되고 액세스 가능하므로 다시 할당하지 마세요.

추가 탐색: 클래스, 인스턴스 및 호출 가능 항목

클래스, 인스턴스, 콜러블에 대해 더 자세히 알아보고 싶다면 문서에서 포괄적인 설명을 참조하세요.

위 내용은 Python에서 'example = list(...)'가 'TypeError: 'list' 개체를 호출할 수 없음'을 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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