Heim >Backend-Entwicklung >Python-Tutorial >Wann führen „i = x' und „i = i x' zu unterschiedlichen Ergebnissen in Python?
Wenn Zuweisung und Erweiterung unterschiedlich sind: Untersuchen Sie „i = x“ vs. „i = i x“
Die Verwendung des =-Operators in Python kann in bestimmten Szenarien zu unerwartetem Verhalten führen. Untersuchen wir die Unterschiede zwischen i = x und i = i x, um zu verstehen, wann sie voneinander abweichen.
Verstehen der Operatorüberlastung
Der =-Operator ruft iadd-Methode, falls vorhanden, oder die add-Methode, wenn iadd vorhanden ist nicht verfügbar. Im Gegensatz dazu ruft der Operator hauptsächlich die Methode add auf.
Veränderliche vs. unveränderliche Objekte
Das Verhalten von = hängt davon ab, ob das Objekt vorhanden ist zugewiesen ist veränderlich (kann geändert werden) oder unveränderlich (kann nicht geändert werden). Für unveränderliche Objekte müssen beide = und eine neue Instanz erstellen.iadd ändert jedoch das ursprüngliche Objekt und weist es wieder dem Variablennamen zu, wobei die vorherige Referenz überschrieben wird.
Beispiel: Listen
Zur Veranschaulichung Um den Unterschied zu erkennen, betrachten Sie den folgenden Code:a = [1, 2, 3] b = a b += [1, 2, 3] print(a) # [1, 2, 3, 1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]Da Listen veränderbar sind, ändert = b an Ort und Stelle, was wirkt sich auf a aus, da beide Variablen auf dieselbe Liste verweisen.Bedenken Sie nun Folgendes:
a = [1, 2, 3] b = a b = b + [1, 2, 3] print(a) # [1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]In diesem Fall erstellt b = b [1, 2, 3] eine neue Liste und lässt a übrig unverändert. Dies liegt daran, dass die Methode
add aufgerufen wird, die eine neue Instanz zurückgibt.
Ausnahmebehandlung für ' ='
In dem Fall, in dem x. __add__ nicht implementiert ist oder NotImplemented zurückgibt und x und y unterschiedliche Typen haben, greift der Operator auf y.__radd__ zurück, falls vorhanden. Daher ist Folgendes äquivalent:foo_instance += bar_instance
foo_instance = bar_instance.__radd__(bar_instance, foo_instance)
Unterklassenüberschreibung
Wenn foo_instance und bar_instance unterschiedliche Typen haben und bar_instance eine Unterklasse von foo_instance ist, bar_instance.__radd__ wird vor foo_instance.__add__ versucht. Dadurch können Unterklassen das Verhalten ihrer Oberklassen überschreiben.Fazit
Das Verständnis der Unterschiede zwischen i = x und i = i x ist entscheidend, um unerwartete Ergebnisse bei der Python-Programmierung zu vermeiden . Indem Sie wissen, wann und wie sich diese Operatoren unterschiedlich verhalten, können Sie sowohl unveränderliche als auch veränderliche Objekte effektiv manipulieren.Das obige ist der detaillierte Inhalt vonWann führen „i = x' und „i = i x' zu unterschiedlichen Ergebnissen in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!