REPL에서 예제 변수가 문자열의 문자 목록을 보유할 것으로 기대하면서 "example = list('easyhoss')" 코드를 시도했는데 다음 오류가 발생했습니다. "TypeError: 'list' 개체가 아닙니다. callable".
이 문제는 내장 Python 클래스 "list"를 목록 인스턴스로 덮어썼기 때문에 발생합니다. 나중에 "example = list('easyhoss')"에서 "list"를 참조하면 Python은 이를 호출할 수 없는 인스턴스로 해석했습니다.
이를 이해하려면 Python의 네임스페이스와 범위 지정 메커니즘을 살펴봐야 합니다.
네임스페이스: Python은 중첩된 네임스페이스를 사용하여 개체 이름(클래스 및 함수 포함)을 저장합니다. 각 모듈에는 내장 함수 및 클래스를 포함하여 자체 네임스페이스가 있습니다.
범위 지정: 이름을 참조할 때 Python은 로컬 네임스페이스를 먼저 확인합니다. 찾을 수 없으면 이름을 찾거나 더 이상 네임스페이스를 찾을 수 없을 때까지 더 높은 수준의 네임스페이스로 이동합니다(NameError 발생).
귀하의 경우에는 자신도 모르게 "list" 인스턴스를 전역 "목록" 변수:
example = list('easyhoss') # "list" refers to the built-in class list = list('abc') # Creates a "list" variable referencing an instance of "list" example = list('easyhoss') # "list" refers to the instance, resulting in the error
이 덮어쓰기는 내장된 "목록" 클래스를 숨겨서 "TypeError."
이 오류를 방지하려면 이름 섀도잉을 강조하는 Python 플러그인과 함께 PyCharm 또는 Atom과 같은 IDE를 사용하십시오.
추가 고려 사항:
대화형 Python 세션을 시작하면 자체 네임스페이스가 있는 임시 모듈이 생성되며 이는 네임스페이스 동작에도 영향을 미칠 수 있습니다.
위 내용은 `example = list(...)`가 때때로 `TypeError: 'list' object is not callable`을 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!