web-dev-qa-db-ger.com

Was genau macht + = in Python?

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.

78

In Python ist + = Zuckerüberzug für die spezielle Methode __iadd__ oder __add__ oder __radd__, falls __iadd__ nicht vorhanden ist. Die __iadd__-Methode einer Klasse kann alles, was sie will. Das Listenobjekt implementiert es und verwendet es, um über ein iterierbares Objekt zu iterieren, das jedes Element auf dieselbe Weise an sich selbst anfügt wie die Erweiterungsmethode der Liste.

Hier ist eine einfache benutzerdefinierte Klasse, die die spezielle Methode __iadd__ implementiert. Sie initialisieren das Objekt mit einem int und können dann mit dem Operator + = eine Zahl hinzufügen. Ich habe eine Druckanweisung in __iadd__ hinzugefügt, um zu zeigen, dass sie aufgerufen wird. Außerdem wird erwartet, dass __iadd__ ein Objekt zurückgibt. Daher habe ich den Zusatz von sich und die andere Zahl zurückgegeben, die 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.

106
Bryan

+= fügt einen weiteren Wert mit dem Wert der Variablen hinzu und weist der Variablen den neuen Wert zu.

>>> x = 3
>>> x += 2
>>> print x
5

-=, *=, /= verhält sich ähnlich für Subtraktion, Multiplikation und Division.

86
Imran

+= fügt einer Variablen eine Zahl hinzu und ändert dabei die Variable selbst (während + dies nicht tun würde). Ähnlich dazu gibt es die folgenden, die auch die Variable verändern:

  • -= subtrahiert einen Wert von einer Variablen und setzt die Variable auf das Ergebnis
  • *= multipliziert die Variable und einen Wert, wodurch das Ergebnis zur Variablen wird
  • /=, dividiert die Variable durch den Wert und macht das Ergebnis zur Variablen
  • %= führt den Modulus für die Variable aus, wobei die Variable dann auf das Ergebnis davon gesetzt wird

Es kann andere geben. Ich bin kein Python-Programmierer.

23
Ryan Bigg

x += 5 ist nicht genau das Gleiche wie x = x + 5 in Python.

Hier notieren:

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 + = unerwartet auf Listen?

21
Roshan Mehta

Der rechte Operand wird links hinzugefügt. x += 2 bedeutet x = x + 2

Es kann auch Elemente zu einer Liste hinzufügen - siehe diesen SO -Thread .

16
Kaleb Brasee

Es ist keine bloße syntaktische Verknüpfung. 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']

versus

x=[]                   # empty list
x = x + "something"    # TypeError: can only concatenate list (not "str") to list

Dies veranschaulicht, dass + = die iadd -Listenmethode aufruft, aber + add aufruft, die mit Listen unterschiedliche Aktionen ausführen.

13
C S

A + = b "fügt" b hinzu, um das Ergebnis in a zu speichern. Diese vereinfachte Beschreibung würde den Operator + = in vielen Sprachen beschreiben.

Die vereinfachende Beschreibung wirft jedoch einige Fragen auf.

  1. Was genau meinen wir mit "hinzufügen"?
  2. Was genau meinen wir mit "Speichern des Ergebnisses in"? Python-Variablen speichern keine Werte direkt, sondern Referenzen auf Objekte.

In Python hängen die Antworten auf beide Fragen vom Datentyp von a ab.


Was genau bedeutet "Hinzufügen"?

  • Bei Zahlen bedeutet dies eine numerische Addition.
  • Für Listen, Tupel, Strings usw. bedeutet dies Verkettung.

Beachten Sie, dass + + für Listen flexibler ist als +, der Operator + in einer Liste erfordert eine andere Liste, der Operator + = akzeptiert jedoch alle Iterationen.


Was bedeutet "Speichern des Wertes in"? 

Wenn das Objekt veränderbar ist, wird empfohlen, die Änderung an Ort und Stelle durchzuführen (aber nicht erforderlich). Ein Punkt zeigt also auf das gleiche Objekt, das er zuvor gemacht hat, 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änderliche Objekte verfügen möglicherweise auch über keine Implementierung einer direkten "Hinzufügen" -Operation. In diesem Fall wird die Variable "a" aktualisiert, um auf ein neues Objekt zu zeigen, das das Ergebnis einer Additionsoperation enthält.

Technisch wird dies implementiert, indem zuerst nach __IADD__ gesucht wird. Wenn dies nicht implementiert ist, wird __ADD__ versucht und schließlich __RADD__.


Bei der Verwendung von + = in Python mit Variablen ist Vorsicht geboten, wenn der genaue Typ nicht genau bekannt ist und insbesondere nicht sicher ist, ob der Typ veränderlich ist oder nicht. 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 Tuple aufrufen, wird das Tuple als Teil der + = -Operation kopiert, und b ist nicht betroffen. Wenn wir es jedoch mit einer Liste aufrufen, ändert sich die Liste, sodass sowohl a als auch b betroffen sind. 

In Python 3 wird ein ähnliches Verhalten mit den Typen "Bytes" und "Bytearray" beobachtet. 


Beachten Sie schließlich, dass eine Neuzuweisung auch dann erfolgt, wenn das Objekt nicht ersetzt wird. Dies ist nicht wichtig, wenn die linke Seite lediglich eine Variable ist. Sie kann jedoch verwirrend sein, wenn Sie eine unveränderliche Auflistung haben, die sich beispielsweise auf veränderliche Auflistungen bezieht: 

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 jedoch eine Ausnahme ausgelöst, wenn der Code versucht, ein [0] nicht erneut zuzuweisen.

7
plugwash
+= 

ist nur eine Abkürzung zum Schreiben 

numbers = 1
numbers = numbers + 1
print (numbers)   ## 2

Stattdessen würden Sie schreiben

numbers = 1
numbers += 1
print (numbers)   ## 2

Beide Möglichkeiten sind korrekt, aber mit Beispiel 2 können Sie etwas weniger Code schreiben

3
Vash

Die kurze Antwort ist += kann übersetzt werden als "addiere, was sich rechts von + = befindet, zu der Variablen links von + =".

Ex. Wenn Sie a = 10 haben, wäre a += 5: a = a + 5

Also ist "a" jetzt gleich 15. 

0
user10917993

Denken Sie daran, dass Sie in Ihrem alten Taschenrechner beispielsweise 2 & 3 summiert haben und jedes Mal, wenn Sie den = drücken, um 3 zur Gesamtsumme addiert zu sehen, der += eine ähnliche Aufgabe erfüllt. Beispiel:

>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8
0
salhin

Wie andere auch sagten, ist der Operator + = eine Abkürzung . Ein Beispiel:

var = 1;
var = var + 1;
#var = 2

Es könnte auch so geschrieben werden:

var = 1;
var += 1;
#var = 2

Anstatt das erste Beispiel zu schreiben, können Sie einfach das zweite schreiben, was gut funktionieren würde.

0
ZeroFunter