2009-09-02 2 views
8

Das folgende ist ein Ausschnitt aus Python-Code, den ich gefunden habe, der ein mathematisches Problem löst. Was genau macht es? Ich war mir nicht sicher, was ich für Google tun sollte.Was macht dieser Teil des Python-Codes?

x, y = x + 3 * y, 4 * x + 1 * y 

Ist dies eine spezielle Python-Syntax?

Antwort

16
x, y = x + 3 * y, 4 * x + 1 * y 

ist das Äquivalent:

x = x + 3 * y 
y = 4 * x + 1 * y 

AUSSER, daß es die ursprünglichen Werte für x und y in beiden Berechnungen verwendet - weil die neuen Werte für x und y beide nicht bis zugeordnet sind Berechnungen sind abgeschlossen.

Die generische Form:

x,y = a,b 

wobei a und b sind Ausdrücke, die Werte, die jeweils mit x und y zugewiesen bekommen. Sie können tatsächlich jede Tupel (Satz von kommagetrennte Werte) zu jedem Tupel von Variablen der gleichen Größe zuweisen - zum Beispiel,

x,y,z = a,b,c 

würde auch funktionieren, aber

w,x,y,z = a,b,c 

würde nicht, weil die Anzahl der Werte im rechten Tupel stimmt nicht mit der Anzahl der Variablen im linken Tupel überein.

+4

Ich denke, eine temporäre Variable fügt Klarheit hinzu. Ich hoffe, es macht Ihnen nichts aus – hop

+4

Ich denke tatsächlich, dass die Erklärung mit einem hervorgehobenen "EXCEPT" den Punkt klarer nach Hause bringt, also habe ich die Änderung rückgängig gemacht. Danke für den Verbesserungsversuch, ich bin gerade in dieser Sache anderer Meinung. :) – Amber

+0

Macht perfekten Sinn. In Klammern zu sehen, machte es völlig klar. Sehr einfach, es schnell zu lesen und dieses kleine Detail zu vermissen. Vielen Dank! –

12

Es ist eine Zuordnung zu einer tuple, auch Sequenz Entpacken genannt. Wahrscheinlich ist es klarer, wenn Sie Klammern um die Tupel hinzu:

(x, y) = (x + 3 * y, 4 * x + 1 * y) 

Der Wert x + 3 * y zugeordnet ist x und der Wert 4 * x + 1 * y wird y zugeordnet.

Es entspricht dies:

x_new = x + 3 * y 
y_new = 4 * x + 1 * y 
x = x_new 
y = y_new 
+7

Wahrscheinlich noch deutlicher, wenn Sie die Klammern anders gruppieren: 'x, y = (x + 3 * y), (4 * x + 1 * y)'. Das Komma kann leicht darin fehlen. –

+0

Ah, ja, die Klammern machten alles klar - Augen konnten es vorher nicht sehen [ohrfeigt die Stirn] ... –

0

ich als „gleichzeitige Zuordnung“ vor kurzem sah dies auch genannt, die den Geist von mehreren der Antworten zu erfassen scheint.