Heim > Backend-Entwicklung > Python-Tutorial > Warum löst „example = list(...)' einen „TypeError: ‚list'-Objekt ist nicht aufrufbar' aus?

Warum löst „example = list(...)' einen „TypeError: ‚list'-Objekt ist nicht aufrufbar' aus?

Linda Hamilton
Freigeben: 2024-12-30 16:29:09
Original
621 Leute haben es durchsucht

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

Warum führt „example = list(...)“ zu „TypeError: ‚list‘ object is not callable“?“

In der Wenn Sie REPL verwenden, tritt möglicherweise der Fehler „TypeError: ‚list‘-Objekt ist nicht aufrufbar“ auf, wenn Sie versuchen, der Beispielvariable eine Liste zuzuweisen, indem Sie Folgendes verwenden Code:

example = list('easyhoss')
Nach dem Login kopieren

Dieses Problem tritt auf, weil die in Python integrierte Namensliste, die auf eine Klasse verweist, durch die Erstellung einer Variablen mit demselben Namen überschattet wurde. Diese Variable zeigt auf eine Instanz der Listenklasse.

Um diese Schattenbildung zu veranschaulichen:

>>> 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
Nach dem Login kopieren

Da Python Objekte (einschließlich Funktionen und Klassen) anhand ihres Namens in Namespaces referenziert, können Sie diese umschreiben Name in beliebigem Umfang. Die Laufzeit sucht im lokalen Namespace nach dem Namen und geht, wenn er nicht gefunden wird, zu Namespaces höherer Ebene über. Dieser Vorgang wird fortgesetzt, bis der Name gefunden wird oder ein NameError ausgelöst wird.

Builtins, wie z. B. die Liste, befinden sich im höherwertigen Namespace __builtins__. Wenn die Variablenliste im globalen Namensraum eines Moduls deklariert ist, sucht der Interpreter nicht in __builtins__ danach. Wenn in ähnlicher Weise eine Variable var innerhalb einer Funktion erstellt wird und eine andere Variable im globalen Namespace definiert wird, bezieht sich die Referenzierung der Variable aus der Funktion immer auf die lokale Variable.

Zum Beispiel:

>>> 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
Nach dem Login kopieren

Daher folgen Python-Builtins denselben Regeln wie alle anderen Objekte. Shadowing, wie in diesem Fall dargestellt, kann durch die Verwendung einer IDE vermieden werden, die Namens-Shadowing-Probleme hervorhebt.

Außerdem ist die Liste als Klasse aufrufbar. Der Aufruf einer Klasse löst den Aufbau und die Initialisierung einer Instanz aus. Während eine Instanz auch aufrufbar sein kann, ist dies bei Listeninstanzen nicht der Fall. Klassen und Instanzen sind deutlich unterschiedliche Konzepte, die in der Python-Dokumentation erläutert werden.

Das obige ist der detaillierte Inhalt vonWarum löst „example = list(...)' einen „TypeError: ‚list'-Objekt ist nicht aufrufbar' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage