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.
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.
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.
>>> class Adder(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 += 3
in __iadd__ 3
>>> a
5
Hoffe das hilft.
__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.
>>> x = 3
>>> x += 2
>>> print x
5
-=
, *=
, /=
Tut ähnlich für die Subtraktion, Multiplikation und Division.
x += 5
ist nicht genau das gleiche wie x = x + 5
in Python zu sagen .
Beachten Sie hier:
In [1]: x = [2,3,4]
In [2]: y = x
In [3]: x += 7,8,9
In [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]
Siehe als Referenz: Warum verhält sich + = auf Listen unerwartet?
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.
&=
, >>=
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 .
Es ist keine bloße syntaktische Abkürzung. Versuche dies:
x=[] # empty list
x += "something" # iterates over the string and appends to list
print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']
gegen
x=[] # empty list
x = x + "something" # TypeError: can only concatenate list (not "str") to list
Dies zeigt, dass + = die iadd-Listenmethode aufruft, + aber add aufruft , die mit Listen verschiedene Dinge tun.
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.
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.
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 haben a += 5
würden: a = a + 5
Also, "a" jetzt gleich 15.
Hinweis x += y
ist nicht dasselbe wie x = 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, z
>>> x = 2
>>> x += 2 and 1
>>> x
3
>>> x = 2
>>> x = x + 2 and 1
>>> x
1
Beachten Sie, dass der erste Fall erweitert wird auf:
>>> x = 2
>>> x = x + (2 and 1)
>>> x
3
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
+=
ist nur eine Abkürzung zum Schreiben
number = 4
number = number + 1
Also würdest du stattdessen schreiben
numbers = 4
numbers += 1
Beide Möglichkeiten sind korrekt, aber Beispiel zwei hilft Ihnen dabei, etwas weniger Code zu schreiben
Wie andere auch sagten, ist der Operator + = eine Verknüpfung. Ein Beispiel:
var = 1;
var = var + 1;
#var = 2
Es könnte auch so geschrieben werden:
var = 1;
var += 1;
#var = 2
Anstatt also das erste Beispiel zu schreiben, können Sie auch das zweite schreiben, was gut funktionieren würde.
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:
>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8
Ich sehe viele Antworten, die nicht mit + = mit mehreren ganzen Zahlen angezeigt werden.
Ein Beispiel:
x -= 1 + 3
Dies wäre ähnlich wie:
x = x - (1 + 3)
und nicht:
x = (x - 1) + 3
Laut Dokumentation
x += y
ist äquivalent zux = operator.iadd(x, y)
. Eine andere Möglichkeit besteht darin, zu sagen, dassz = operator.iadd(x, y)
dies der zusammengesetzten Aussage entsprichtz = x; z += y
.
So x += 3
ist das gleiche wie x = x + 3
.
x = 2
x += 3
print(x)
wird 5 ausgeben.
Beachten Sie, dass es auch gibt
object.__iadd__