2017-09-17 3 views
-1

Als ich die Bedeutung von + = Operator in Python betrachtete, schaute ich mir die Antworten auf eine ähnliche Frage an: What exactly does += do in python?. Aber im folgenden Codeauszug:+ = in Python, wenn es der dritten Variablen zugewiesen wird

increments += arr[i-1] - arr[i] 

Es gibt eine dritte Variable verwendet, wenn ich das Konzept verstehe es arr subtrahiert [i-1] Werte von arr [i] und fügt sie Wert erhöht und das Ergebnis ist Zuweisungen zugewiesen. Um zu erarbeiten ist die obige Aussage ähnlich wie

increments = increments + (arr[i-1] - arr[i]) 

oder gibt es mehr dazu?

+2

Wirklich, das ist alles, was es tut. Was hast du mehr erwartet? –

+4

Es hängt von den Typen 'arr [i-1]', 'arr [i]' und 'increments' ab. Ein 'x + = ...' ist nicht immer dasselbe wie 'x = x + ...'. Für Listen zum Beispiel ist es nicht. Aber für unveränderliche Objekte ist es das Gleiche, also gibt es für 'int',' str'ings usw. keinen Unterschied. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Vielen Dank. Was ich brauchte, war eine Bestätigung von einem erfahrenen Programmierer. Du siehst, ich bin ein Amateur für Python. Manchmal ist die Bestätigung meines Verständnisses alles, was ich brauche. –

Antwort

2

Von the documentation:

eine Augmented Zuordnung das Ziel auswertet (die im Gegensatz zu normalen Zuweisungsanweisungen, können kein Auspackstation sein), und die Ausdrucksliste, führt die binäre Operation spezifisch für die Art der Zuordnung auf den beide Operanden und ordnet das Ergebnis dem ursprünglichen Ziel zu. Das Ziel wird nur einmal ausgewertet.

Ein erweiterte Zuweisungsausdruck wie x += 1 als x = x + 1 neu geschrieben werden, um eine ähnlich zu erreichen, aber nicht genau gleich Wirkung. In der erweiterten Version wird x nur einmal ausgewertet. Wenn es möglich ist, wird die eigentliche Operation vor Ort ausgeführt, was bedeutet, dass anstatt ein neues Objekt zu erstellen und dies dem Ziel zuzuweisen, stattdessen das alte Objekt modifiziert wird.

Im Gegensatz zu normalen Zuweisungen bewerten erweiterte Zuweisungen die linke Seite vor der Auswertung der rechten Seite. Zum Beispiel, a[i] += f(x) erste Look-Up a[i], dann wertet f(x) und führt die Addition, und schließlich schreibt es das Ergebnis zurück auf a[i].

Mit Ausnahme der Zuweisung zu Tupeln und mehreren Zielen in einer einzigen Anweisung wird die Zuweisung von erweiterten Zuweisungsanweisungen auf die gleiche Weise wie bei normalen Zuweisungen gehandhabt. In ähnlicher Weise ist die binäre Operation, die durch die erweiterte Zuweisung durchgeführt wird, mit Ausnahme des möglichen In-Place-Verhaltens dieselbe wie die normalen binären Operationen.

Für Ziele, die Attributverweise sind, gelten dieselben Einschränkungen für Klassen- und Instanzattribute wie für reguläre Zuweisungen.

(mein Schwerpunkt im zweiten Absatz)

Also ja, dann ist es mehr als nur increments = increments + (arr[i-1] - arr[i]). Der Grad, auf den es ankommt, hängt davon ab, worauf Sie den Operator anwenden.

Verwandte Themen