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