Zuerst müssen Sie den Unterschied zwischen %code% und %code% verstehen.
Die Methode %code% eines Objekts ist eine normale Addition: Sie benötigt zwei Parameter, gibt ihre Summe zurück und ändert keinen der Parameter.
Die Methode %code% eines Objekts nimmt auch zwei Parameter, macht aber die Änderung an Ort und Stelle und ändert den Inhalt des ersten Parameters. Da dies eine Objektmutation erfordert, sollten unveränderliche Typen (wie die Standard-Zahlentypen) keine Methode %code% haben.
%code% verwendet %code% . %code% verwendet %code% , wenn es existiert; Ist dies nicht der Fall, emuliert es es über %code% , wie in %code% . %code% und %code% unterscheiden sich auf die gleiche Weise.
Zur anderen Frage: %code% ist nicht äquivalent zu %code% , denn wenn kein %code% existiert, wird stattdessen %code% verwendet. Sie müssen den Wert zuweisen, um sicherzustellen, dass das Ergebnis in beiden Fällen gespeichert wird: %code% .
Sie können das selbst leicht sehen:
%Vor%Vielleicht, weil einige Python-Objekte unveränderlich sind.
Ich denke, %code% entspricht %code% nur für veränderbare Typen wie Wörterbücher und Listen, aber nicht für unveränderliche Typen wie Zahlen und Zeichenfolgen.
Warum ist %code% nicht äquivalent zu %code% ? Und wie unterscheidet sich %code% von %code% ?
Aus den Dokumenten :
Viele Operationen haben einen "In-Place" Ausführung. Die folgenden Funktionen bieten einen primitiveren Zugang zu In-Place-Betreiber als die üblichen Syntax tut; zum Beispiel, die Anweisung x + = y ist äquivalent zu x = operator.iadd (x, y). Ein anderer Weg sagen wir, dass z = operator.iadd (x, y) ist äquivalent zu die zusammengesetzte Aussage z = x; z + = y.
In Verbindung stehende Frage , aber ich interessiere mich nicht für Python-Klassenmethoden; nur reguläre Operatoren für integrierte Python-Typen.