Ich muss wissen, was + = in Python macht. So einfach ist das. Ich würde mich auch über Links zu Definitionen anderer Kurzhandwerkzeuge in Python freuen.
Es ist ein grundlegender Operator für Python (und viele andere Sprachen auch). Sie sollten mit Google beginnen, wenn Sie keine Python-Referenzen lesen.
Technomage
3
@AndiDog Während beide Fragen den Operator (+ =) betreffen, handelt es sich bei der von Ihnen verknüpften Frage um eine ausgefeilte Verwendung und ein subtiles Problem, und das OP hier ist wahrscheinlich (noch) nicht in der Lage, den dortigen Überlegungen zu folgen.
Dr. Belisarius
3
@AndiDog Vielleicht hatten Sie zu dieser Zeit Recht, aber wenn Sie sich die (fast) akzeptierten Lösungen hier ansehen, ist klar, dass es sich bei dieser Frage um ein grundlegendes Verständnis des Bedieners handelt: D
Dr. belisarius
1
Die meisten Sumbol-Anwendungen sind jetzt auf der Symbolseite docs.python.org/3/genindex-Symbols.html indiziert .
Terry Jan Reedy
Antworten:
148
In Python ist + = eine Zuckerbeschichtung für die __iadd__spezielle Methode oder __add__oder __radd__falls __iadd__nicht vorhanden. Die __iadd__Methode einer Klasse kann alles tun, was sie will. Das Listenobjekt implementiert es und verwendet es, um über ein iterierbares Objekt zu iterieren, wobei jedes Element auf dieselbe Weise an sich angehängt wird wie die Erweiterungsmethode der Liste.
Hier ist eine einfache benutzerdefinierte Klasse, die die __iadd__spezielle Methode implementiert . Sie initialisieren das Objekt mit einem int und können dann mit dem Operator + = eine Zahl hinzufügen. Ich habe eine print-Anweisung hinzugefügt, um __iadd__zu zeigen, dass sie aufgerufen wird. Außerdem __iadd__wird erwartet, dass ein Objekt zurückgegeben wird, daher habe ich die Addition von sich selbst plus die andere Zahl zurückgegeben, was in diesem Fall sinnvoll ist.
>>>classAdder(object):def __init__(self, num=0):
self.num = num
def __iadd__(self, other):print'in __iadd__', other
self.num = self.num + other
return self.num
>>> a =Adder(2)>>> a +=3in __iadd__ 3>>> a
5
Während dies nicht das ist, wonach der Asker gesucht hat, +1 für die echte Antwort. =)
Michael
@ Michael, hier trägt Humor zur Tatsache bei ... :-D
Aaron John Sabu
3
+1 für die Beantwortung der Frage, aber -1 für einen __iadd__, der einen anderen Typ zurückgibt (der selbst hinzugefügt werden kann)
Caleth
Diese Antwort ist zu komplex für den Typ von Person, der fragen müsste, was + = bedeutet (dh ein Anfänger). Ihre Antwort ist keine Anfängerantwort, nicht nur, weil Anfänger Python normalerweise nicht objektorientiert lernen, sondern auch, weil es viel einfachere Antworten gibt (wie bei @ Imran unten). Nur meine zwei Cent, obwohl ich diese Antwort schätze.
Q-Compute
129
+= Fügt dem Wert der Variablen einen weiteren Wert hinzu und weist der Variablen den neuen Wert zu.
>>> x =3>>> x +=2>>>print x
5
-=, *=, /=Tut ähnlich für die Subtraktion, Multiplikation und Division.
"selbst" ist hier eigentlich eine sehr schlechte Beschreibung, da ganze Zahlen unveränderlich sind.
AndiDog
41
x += 5ist nicht genau das gleiche wie x = x + 5in Python zu sagen .
Beachten Sie hier:
In[1]: x =[2,3,4]In[2]: y = x
In[3]: x +=7,8,9In[4]: x
Out[4]:[2,3,4,7,8,9]In[5]: y
Out[5]:[2,3,4,7,8,9]In[6]: x +=[44,55]In[7]: x
Out[7]:[2,3,4,7,8,9,44,55]In[8]: y
Out[8]:[2,3,4,7,8,9,44,55]In[9]: x = x +[33,22]In[10]: x
Out[10]:[2,3,4,7,8,9,44,55,33,22]In[11]: y
Out[11]:[2,3,4,7,8,9,44,55]
+=Fügt einer Variablen eine Zahl hinzu und ändert dabei die Variable selbst (wohingegen +dies nicht der Fall wäre). Ähnlich gibt es Folgendes, das auch die Variable ändert:
-=subtrahiert einen Wert von der Variablen und setzt die Variable auf das Ergebnis
*=, multipliziert die Variable und einen Wert und macht das Ergebnis zur Variablen
/=, dividiert die Variable durch den Wert und macht das Ergebnis zur Variablen
%=führt einen Modul für die Variable aus, wobei die Variable dann auf das Ergebnis gesetzt wird
Es kann andere geben. Ich bin kein Python-Programmierer.
Für Zahlen ist diese Antwort richtig. (Siehe Bryans Antwort für besonderes Verhalten.) Es gibt in der Tat einige andere, darunter Bitoperatoren ( &=, >>=usw.) und weitere mathematische Operatoren ( **=usw.).
Michael
16
Es fügt den rechten Operanden links hinzu. x += 2meintx = x + 2
Es kann auch Elemente zu einer Liste hinzufügen - siehe diesen SO-Thread .
Normalerweise fügt a + = b b zu einem Speichern des Ergebnisses in a hinzu. Diese vereinfachte Beschreibung würde den Operator + = in vielen Sprachen beschreiben.
Die vereinfachte Beschreibung wirft jedoch einige Fragen auf.
Was genau meinen wir mit "Hinzufügen"?
Was genau meinen wir mit "Speichern des Ergebnisses in a"? Python-Variablen speichern Werte nicht direkt, sondern Verweise auf Objekte.
In Python hängen die Antworten auf diese beiden Fragen vom Datentyp von a ab.
Was genau bedeutet "Hinzufügen"?
Für Zahlen bedeutet dies eine numerische Addition.
Für Listen, Tupel, Zeichenfolgen usw. bedeutet dies Verkettung.
Beachten Sie, dass für Listen + = flexibler als + ist und der Operator + in einer Liste eine andere Liste erfordert, der Operator + = jedoch alle iterierbaren Elemente akzeptiert.
Was bedeutet es also, den Wert in einem zu speichern?
Wenn das Objekt veränderbar ist, wird empfohlen (aber nicht erforderlich), die Änderung direkt durchzuführen. Ein Punkt zeigt also auf dasselbe Objekt wie zuvor, aber dieses Objekt hat jetzt einen anderen Inhalt.
Wenn das Objekt unveränderlich ist, kann es die Änderung offensichtlich nicht direkt durchführen. Einige veränderbare Objekte verfügen möglicherweise auch nicht über eine Implementierung einer direkten "Add" -Operation. In diesem Fall wird die Variable "a" aktualisiert, um auf ein neues Objekt zu verweisen, das das Ergebnis einer Additionsoperation enthält.
Technisch wird dies implementiert, indem zuerst gesucht wird __IADD__, wenn dies nicht implementiert ist, dann __ADD__wird versucht und schließlich __RADD__.
Bei der Verwendung von + = in Python für Variablen, bei denen wir uns nicht sicher sind, ob der Typ genau ist, und insbesondere wenn wir nicht sicher sind, ob der Typ veränderlich ist oder nicht, ist Vorsicht geboten. Betrachten Sie zum Beispiel den folgenden Code.
def dostuff(a):
b = a
a +=(3,4)print(repr(a)+' '+repr(b))
dostuff((1,2))
dostuff([1,2])
Wenn wir Dostuff mit einem Tupel aufrufen, wird das Tupel als Teil der + = Operation kopiert und b bleibt davon unberührt. Wenn wir es jedoch mit einer Liste aufrufen, wird die Liste an Ort und Stelle geändert, sodass sowohl a als auch b betroffen sind.
In Python 3 wird ein ähnliches Verhalten bei den Typen "Bytes" und "Bytearray" beobachtet.
Beachten Sie schließlich, dass die Neuzuweisung auch dann erfolgt, wenn das Objekt nicht ersetzt wird. Dies spielt keine große Rolle, wenn die linke Seite nur eine Variable ist, kann jedoch zu verwirrendem Verhalten führen, wenn Sie eine unveränderliche Sammlung haben, die sich auf veränderbare Sammlungen bezieht, zum Beispiel:
a =([1,2],[3,4])
a[0]+=[5]
In diesem Fall wird [5] erfolgreich zu der Liste hinzugefügt, auf die mit [0] verwiesen wird. Anschließend wird eine Ausnahme ausgelöst, wenn der Code versucht, eine [0] neu zuzuweisen, und dies nicht schafft.
Was trägt diese Antwort bei, die noch nicht besprochen wurde? Es ist eine doppelte Antwort ...
jdv, ich versuche nur zu helfen. Ich bin ein neuer Mitwirkender. Es tut mir leid, wenn Sie glauben, dass meine Antwort ein Duplikat war.
Es ist klar, dass es sich um ein Duplikat handelt, wenn Sie sich die meisten anderen Antworten ansehen. Es ist in Ordnung, einen Beitrag zu leisten, aber Sie sollten sich bemühen, etwas Neues beizutragen (z. B. die Antwort add vs iadd), oder Sie möchten eine klarere Lösung finden. Aber soweit ich das beurteilen kann, sind die Antworten mit den höchsten Stimmen so klar wie möglich, um eine grundlegende Antwort zu erhalten.
4
Hinweis x += yist nicht dasselbe wie x = x + yin einigen Situationen, in denen ein zusätzlicher Operator enthalten ist, da der Operator Vorrang hat und die rechte Seite immer zuerst ausgewertet wird, z
>>> x =2>>> x +=2and1>>> x
3>>> x =2>>> x = x +2and1>>> x
1
Beachten Sie, dass der erste Fall erweitert wird auf:
>>> x =2>>> x = x +(2and1)>>> x
3
Es ist wahrscheinlicher, dass Sie dies in der "realen Welt" mit anderen Betreibern begegnen, z
Denken Sie daran, wenn Sie in Ihrem alten Taschenrechner beispielsweise 2 und =3 summiert haben und jedes Mal, wenn Sie die 3 treffen, die zur Gesamtsumme addiert werden, +=erledigt das einen ähnlichen Job. Beispiel:
x += yist äquivalent zu x = operator.iadd(x, y). Eine andere Möglichkeit besteht darin, zu sagen, dass z = operator.iadd(x, y)dies der zusammengesetzten Aussage entspricht z = x; z += y.
object.__iadd__
Antworten:
In Python ist + = eine Zuckerbeschichtung für die
__iadd__
spezielle Methode oder__add__
oder__radd__
falls__iadd__
nicht vorhanden. Die__iadd__
Methode einer Klasse kann alles tun, was sie will. Das Listenobjekt implementiert es und verwendet es, um über ein iterierbares Objekt zu iterieren, wobei jedes Element auf dieselbe Weise an sich angehängt wird wie die Erweiterungsmethode der Liste.Hier ist eine einfache benutzerdefinierte Klasse, die die
__iadd__
spezielle Methode implementiert . Sie initialisieren das Objekt mit einem int und können dann mit dem Operator + = eine Zahl hinzufügen. Ich habe eine print-Anweisung hinzugefügt, um__iadd__
zu zeigen, dass sie aufgerufen wird. Außerdem__iadd__
wird erwartet, dass ein Objekt zurückgegeben wird, daher habe ich die Addition von sich selbst plus die andere Zahl zurückgegeben, was in diesem Fall sinnvoll ist.Hoffe das hilft.
quelle
__iadd__
, der einen anderen Typ zurückgibt (der selbst hinzugefügt werden kann)+=
Fügt dem Wert der Variablen einen weiteren Wert hinzu und weist der Variablen den neuen Wert zu.-=
,*=
,/=
Tut ähnlich für die Subtraktion, Multiplikation und Division.quelle
x += 5
ist nicht genau das gleiche wiex = x + 5
in Python zu sagen .Beachten Sie hier:
Siehe als Referenz: Warum verhält sich + = auf Listen unerwartet?
quelle
x += 7,8,9
+=
Fügt einer Variablen eine Zahl hinzu und ändert dabei die Variable selbst (wohingegen+
dies nicht der Fall wäre). Ähnlich gibt es Folgendes, das auch die Variable ändert:-=
subtrahiert einen Wert von der Variablen und setzt die Variable auf das Ergebnis*=
, multipliziert die Variable und einen Wert und macht das Ergebnis zur Variablen/=
, dividiert die Variable durch den Wert und macht das Ergebnis zur Variablen%=
führt einen Modul für die Variable aus, wobei die Variable dann auf das Ergebnis gesetzt wirdEs kann andere geben. Ich bin kein Python-Programmierer.
quelle
&=
,>>=
usw.) und weitere mathematische Operatoren (**=
usw.).Es fügt den rechten Operanden links hinzu.
x += 2
meintx = x + 2
Es kann auch Elemente zu einer Liste hinzufügen - siehe diesen SO-Thread .
quelle
Es ist keine bloße syntaktische Abkürzung. Versuche dies:
gegen
Dies zeigt, dass + = die iadd-Listenmethode aufruft, + aber add aufruft , die mit Listen verschiedene Dinge tun.
quelle
Normalerweise fügt a + = b b zu einem Speichern des Ergebnisses in a hinzu. Diese vereinfachte Beschreibung würde den Operator + = in vielen Sprachen beschreiben.
Die vereinfachte Beschreibung wirft jedoch einige Fragen auf.
In Python hängen die Antworten auf diese beiden Fragen vom Datentyp von a ab.
Was genau bedeutet "Hinzufügen"?
Beachten Sie, dass für Listen + = flexibler als + ist und der Operator + in einer Liste eine andere Liste erfordert, der Operator + = jedoch alle iterierbaren Elemente akzeptiert.
Was bedeutet es also, den Wert in einem zu speichern?
Wenn das Objekt veränderbar ist, wird empfohlen (aber nicht erforderlich), die Änderung direkt durchzuführen. Ein Punkt zeigt also auf dasselbe Objekt wie zuvor, aber dieses Objekt hat jetzt einen anderen Inhalt.
Wenn das Objekt unveränderlich ist, kann es die Änderung offensichtlich nicht direkt durchführen. Einige veränderbare Objekte verfügen möglicherweise auch nicht über eine Implementierung einer direkten "Add" -Operation. In diesem Fall wird die Variable "a" aktualisiert, um auf ein neues Objekt zu verweisen, das das Ergebnis einer Additionsoperation enthält.
Technisch wird dies implementiert, indem zuerst gesucht wird
__IADD__
, wenn dies nicht implementiert ist, dann__ADD__
wird versucht und schließlich__RADD__
.Bei der Verwendung von + = in Python für Variablen, bei denen wir uns nicht sicher sind, ob der Typ genau ist, und insbesondere wenn wir nicht sicher sind, ob der Typ veränderlich ist oder nicht, ist Vorsicht geboten. Betrachten Sie zum Beispiel den folgenden Code.
Wenn wir Dostuff mit einem Tupel aufrufen, wird das Tupel als Teil der + = Operation kopiert und b bleibt davon unberührt. Wenn wir es jedoch mit einer Liste aufrufen, wird die Liste an Ort und Stelle geändert, sodass sowohl a als auch b betroffen sind.
In Python 3 wird ein ähnliches Verhalten bei den Typen "Bytes" und "Bytearray" beobachtet.
Beachten Sie schließlich, dass die Neuzuweisung auch dann erfolgt, wenn das Objekt nicht ersetzt wird. Dies spielt keine große Rolle, wenn die linke Seite nur eine Variable ist, kann jedoch zu verwirrendem Verhalten führen, wenn Sie eine unveränderliche Sammlung haben, die sich auf veränderbare Sammlungen bezieht, zum Beispiel:
In diesem Fall wird [5] erfolgreich zu der Liste hinzugefügt, auf die mit [0] verwiesen wird. Anschließend wird eine Ausnahme ausgelöst, wenn der Code versucht, eine [0] neu zuzuweisen, und dies nicht schafft.
quelle
Die kurze Antwort
+=
kann übersetzt werden als "füge alles hinzu, was rechts vom + = zur Variablen links vom + = steht".Ex. Wenn Sie
a = 10
dann habena += 5
würden:a = a + 5
Also, "a" jetzt gleich 15.
quelle
Hinweis
x += y
ist nicht dasselbe wiex = x + y
in einigen Situationen, in denen ein zusätzlicher Operator enthalten ist, da der Operator Vorrang hat und die rechte Seite immer zuerst ausgewertet wird, zBeachten Sie, dass der erste Fall erweitert wird auf:
Es ist wahrscheinlicher, dass Sie dies in der "realen Welt" mit anderen Betreibern begegnen, z
x *= 2 + 1
==x = x * (2 + 1)
! =x = x * 2 + 1
quelle
+=
ist nur eine Abkürzung zum SchreibenAlso würdest du stattdessen schreiben
Beide Möglichkeiten sind korrekt, aber Beispiel zwei hilft Ihnen dabei, etwas weniger Code zu schreiben
quelle
Wie andere auch sagten, ist der Operator + = eine Verknüpfung. Ein Beispiel:
Es könnte auch so geschrieben werden:
Anstatt also das erste Beispiel zu schreiben, können Sie auch das zweite schreiben, was gut funktionieren würde.
quelle
Denken Sie daran, wenn Sie in Ihrem alten Taschenrechner beispielsweise 2 und
=
3 summiert haben und jedes Mal, wenn Sie die 3 treffen, die zur Gesamtsumme addiert werden,+=
erledigt das einen ähnlichen Job. Beispiel:quelle
Ich sehe viele Antworten, die nicht mit + = mit mehreren ganzen Zahlen angezeigt werden.
Ein Beispiel:
Dies wäre ähnlich wie:
und nicht:
quelle
Laut Dokumentation
So
x += 3
ist das gleiche wiex = x + 3
.wird 5 ausgeben.
Beachten Sie, dass es auch gibt
quelle