> 백엔드 개발 > 파이썬 튜토리얼 > `example = list(...)`에서 `TypeError: 'list' 객체가 호출 가능하지 않습니다`가 발생하는 이유는 무엇입니까?

`example = list(...)`에서 `TypeError: 'list' 객체가 호출 가능하지 않습니다`가 발생하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-30 16:29:09
원래의
621명이 탐색했습니다.

Why does `example = list(...)` raise a `TypeError: 'list' object is not callable`?

""example = list(...)"" 결과가 ""TypeError: 'list' object is not callable"인 이유는 무엇입니까?"

REPL, 다음을 사용하여 변수 예제에 목록을 할당하려고 하면 ""TypeError: 'list' object is not callable"" 오류가 발생할 수 있습니다. code:

example = list('easyhoss')
로그인 후 복사

이 문제는 클래스를 참조하는 Python 내장 이름 목록이 동일한 이름의 변수를 생성하여 숨겨졌기 때문에 발생합니다. 이 변수는 목록 클래스의 인스턴스를 가리킵니다.

이 섀도잉을 설명하려면:

>>> example = list('easyhoss')  # 'list' refers to the builtin class
>>> list = list('abc')  # Create a variable 'list' referencing an instance of 'list'
>>> example = list('easyhoss')  # 'list' now refers to the instance
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: 'list' object is not callable
로그인 후 복사

Python은 네임스페이스에서 이름으로 객체(함수 및 클래스 포함)를 참조하므로 모든 객체를 다시 작성할 수 있습니다. 모든 범위의 이름. 런타임은 로컬 네임스페이스에서 이름을 검색하고 이름이 없으면 상위 수준 네임스페이스로 진행합니다. 이 프로세스는 이름이 발견되거나 NameError가 발생할 때까지 계속됩니다.

목록과 같은 내장 항목은 상위 네임스페이스 __builtins__에 있습니다. 변수 목록이 모듈의 전역 네임스페이스에 선언된 경우 인터프리터는 __builtins__에서 해당 목록을 검색하지 않습니다. 마찬가지로 함수 내에서 var 변수가 생성되고 전역 네임스페이스에 다른 var가 정의된 경우 함수에서 var를 참조하면 항상 로컬 변수를 참조하게 됩니다.

예:

>>> example = list("abc")  # Works fine
>>>
>>> # Creating variable "list" in the global namespace of the module
>>> list = list("abc")
>>>
>>> example = list("abc")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>>> # Python finds "list" in the global namespace,
>>> # but it is not the desired "list".
>>>
>>> # Remove "list" from the global namespace
>>> del list
>>> # Since "list" is no longer in the global namespace,
>>> # Python searches in a higher-level namespace.
>>> example = list("abc")  # Works now
로그인 후 복사

따라서 Python 내장 기능은 다른 모든 객체와 동일한 규칙을 따릅니다. 이 경우에 설명된 섀도잉은 이름 섀도잉 문제를 강조하는 IDE를 사용하여 피할 수 있습니다.

또한 클래스인 목록은 호출 가능합니다. 클래스를 호출하면 인스턴스 생성 및 초기화가 트리거됩니다. 인스턴스도 호출할 수 있지만 목록 인스턴스는 호출할 수 없습니다. 클래스와 인스턴스는 Python 문서에 설명된 완전히 다른 개념입니다.

위 내용은 `example = list(...)`에서 `TypeError: 'list' 객체가 호출 가능하지 않습니다`가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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