Unerwartetes Verhalten des is-Operators bei nicht zwischengespeicherten Ganzzahlen
Frage:
Innerhalb einer Funktion gibt der is-Operator zurück True, wenn zwei ganzzahlige Literale außerhalb des Bereichs von [-5, 256] verglichen werden, aber False, wenn dies außerhalb der Funktion erfolgt. Warum tritt diese Inkonsistenz auf?
Antwort:
tl;dr:
Der Python-Interpreter führt Codeblöcke als Einheiten aus . Funktionen sind einzelne Blöcke, während interaktive Befehle separate Blöcke sind. Jeder Block enthält seine eigenen Objekte, einschließlich Ganzzahlen. Somit verweisen ganze Zahlen, die innerhalb einer Funktion deklariert werden, auf dasselbe Objekt, während die außerhalb deklarierten Ganzzahlen dies nicht tun.
Ausarbeitung:
-
Funktion :
- Der Codeblock wird innerhalb der Funktion definiert.
- Literale innerhalb des Blocks (z. B. 1000) werden als einzelnes Objekt gespeichert.
- ist Überprüft die Objektidentität, sodass a ist b innerhalb der Funktion True zurückgibt, da a und b beide auf dasselbe Objekt verweisen.
-
Interaktive Befehle:
- Jeder Befehl wird als separater Codeblock ausgeführt.
- Literale innerhalb jedes Blocks werden als separate Objekte gespeichert.
- überprüft die Objektidentität und die Objekte auf Literale sind unterschiedlich, a ist b gibt False zurück.
Zusätzliche Beobachtungen:
- Dieses Verhalten gilt für nicht ganze Zahlen Literale (z. B. Float-Literale).
- Python verwendet ein Wörterbuch, um Konstanten in Codeobjekten zu speichern, und prüft auf vorhandene Konstanten, bevor neue hinzugefügt werden.
Vorbehalte:
-
Verkettete Anweisungen: Wenn Befehle verkettet sind (z. B. a = b = 1000), werden sie als ein einzelner Codeblock interpretiert, was zu True führt.
-
Ausführung auf Modulebene:Die Ausführung auf Modulebene (z. B. a = b = 1000) erfolgt innerhalb eines einzelnen Codeblocks, was zu True führt.
-
Veränderliche Objekte: Die Inkonsistenz gilt nicht für veränderliche Objekte; a = b = [] wird immer False ergeben.
Das obige ist der detaillierte Inhalt vonWarum verhält sich der „is'-Operator bei nicht zwischengespeicherten Ganzzahlen innerhalb und außerhalb von Funktionen unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme: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