Betrachten Sie die folgende Sitzung. Wie werden die Unterschiede erklärt? Ich dachte, dass a += b
ein syntaktischer Zucker von (und damit äquivalent) a = a + b
ist. Offensichtlich liege ich falsch.
Danke
Der Operator +
führt zu einem Aufruf der speziellen Methode __add__
das sollte ein neues Objekt erstellen und das Original nicht ändern.
Auf der anderen Seite führt die Verwendung des Operators +=
zu einem Aufruf von __iadd__
sollte das Objekt wenn möglich modifizieren, anstatt ein neues Objekt zu erstellen.
__add__
Diese Methoden werden aufgerufen, um die binären arithmetischen Operationen (+, -, *, //,%, divmod (), pow (), **, & lt; & lt; & gt; & gt; & amp ;; , |). Um beispielsweise den Ausdruck x + y auszuwerten, wobei x eine Instanz einer Klasse mit einer __add __ () -Methode ist, wird x .__ add __ (y) aufgerufen.
__iadd__
Diese Methoden werden aufgerufen, um die erweiterten arithmetischen Zuordnungen zu implementieren (+ =, - =, * =, / =, // =,% =, ** =, & lt; & lt; =, & gt; & gt; = & amp; ; =, ^ =, | =). Diese Methoden sollten versuchen, die Operation in-place (modifying self) durchzuführen und das Ergebnis zurückgeben (das kann sein, muss aber nicht selbst sein).
Natürlich ist es möglich, __add__
und __iadd__
zu implementieren, um ein anderes Verhalten zu haben, wenn Sie das möchten, aber was Sie beobachten, ist der Standard und empfohlene Weg. Und, ja, es ist ein wenig überraschend, wenn man es das erste Mal sieht.
Betrachten Sie die folgende Sitzung. Wie werden die Unterschiede erklärt? Ich dachte, dass a += b
ein syntaktischer Zucker von (und damit äquivalent) a = a + b
ist. Offensichtlich liege ich falsch.
Danke
Der Operator +
führt zu einem Aufruf der speziellen Methode __add__
das sollte ein neues Objekt erstellen und das Original nicht ändern.
Auf der anderen Seite führt die Verwendung des Operators +=
zu einem Aufruf von __iadd__
sollte das Objekt wenn möglich modifizieren, anstatt ein neues Objekt zu erstellen.
__iadd__
Diese Methoden werden aufgerufen, um die binären arithmetischen Operationen (+, -, *, //,%, divmod (), pow (), **, & lt; & lt; & gt; & gt; & amp ;; , |). Um beispielsweise den Ausdruck x + y auszuwerten, wobei x eine Instanz einer Klasse mit einer __add __ () -Methode ist, wird x .__ add __ (y) aufgerufen.
__add__
Diese Methoden werden aufgerufen, um die erweiterten arithmetischen Zuordnungen zu implementieren (+ =, - =, * =, / =, // =,% =, ** =, & lt; & lt; =, & gt; & gt; = & amp; ; =, ^ =, | =). Diese Methoden sollten versuchen, die Operation in-place (modifying self) durchzuführen und das Ergebnis zurückgeben (das kann sein, muss aber nicht selbst sein).
Natürlich ist es möglich, a += b
und a = a + b
zu implementieren, um ein anderes Verhalten zu haben, wenn Sie das möchten, aber was Sie beobachten, ist der Standard und empfohlene Weg. Und, ja, es ist ein wenig überraschend, wenn man es das erste Mal sieht.
Tags und Links python syntax numpy syntactic-sugar