2016-01-05 17 views
11

Ich habe versucht, eine Erklärung von this, die Gotcha Teil zu finden:mehrere Zuweisungen mit einem Komma in Python

b = "1984" 
a = b, c = "AB" 
print(a, b, c) 

kehrt:

('AB', 'A', 'B') 

Ich verstehe, was mit mehreren geschieht gleich:

a = b = 1 

aber ich benutze es zusammen mit einem Komma, ich kann das Verhalten nicht verstehen, Ideen, warum es geht rks so?

Antwort

12

Die Antwort ist

a = b, c ="AB" 

wirkt wie:

a = (b, c) = "AB" 

Aus diesem Grund:

a = "AB" and b = "A" and c = "B" 
+0

brillant, es dauerte eine Minute a = „AB“, falls jemand anderes fragen, zu verstehen, ist, weil ein verweist auf den Speicher, in den „AB“ gespeichert ist, hat nichts mit dem Ergebnis der zweiten Zuweisung zu tun –

+0

Interessanterweise wird 'a = "AB" 'tatsächlich * vor *' (b, c) = "AB" '(um das zu sehen, muss man eine Situation in welche Zuordnungen Nebenwirkungen haben). Dies ist für mich nicht verständlich, weil C/C++ es in umgekehrter Reihenfolge tun würde. – jez

-2

Diese Operationen, um zu bestellen, Linie 2 tatsächlich zwei verschiedene Aussagen kommt unten ist .

a = b 

ist zuerst abgeschlossen. Dann

b, c = "AB" 

was entpackt den Wert von "AB" und Zuordnung "A" zu b und "B" zu c.

+0

'a = b 'ist * nicht * zuerst abgeschlossen. Wenn dies der Fall wäre, hätten Sie das erwartete Verhalten des OP und "a" würde als "1984" enden. 'a =" AB "' und '(b, c) =" AB "' sind die zwei Zuweisungen, die tatsächlich passieren (die Reihenfolge, in der sie ausgeführt werden, ist in diesem Fall nicht das Problem) – jez

+0

... aber 'a = "AB" '* ist * zuerst abgeschlossen, vor' b = '' A '' und 'c =" B ". Das ist vermutlich das, was Sie sagen wollten. Und ich muss sagen, es ist eine Überraschung für mich, dass die Aufgaben werden in dieser Reihenfolge ausgeführt - aber die Reihenfolge zählt nur, wenn es Nebeneffekte der Zuweisung gibt. – jez

+3

Weiß nicht, was ich jetzt denke, dass ich lese, was ich geschrieben habe .... nicht genug Kaffee heute Morgen. – BenJ

0
 
a = b, c = "AB" 

Wird nicht so interpretiert, wie Sie es denken. Sie haben eine Mehrfachbelegung, aber es ist nicht a = b und c = "AB". Es ist c, b = "AB" und a = "AB". In Python

 
x = y = z = 1 

als X, Y interpretiert und Z zugeordneten Wert immer 1. Und Komma verwendet wird Wertelisten in einzelne Variablen auszupacken, so b, c = "AB" entpackt "AB" in die " A und B". So am Ende dieser Linie

 
a = b, c = "AB" 
a == "AB" 
b == "A" 
c == "B" 
Verwandte Themen