Wie funktioniert Pythons Komma-Operator während der Zuweisung?
Las ich die Zuordnung von Aussagen in die Python docs ( http://docs.python.org/reference/simple_stmts.html#assignment-statements ).
In dass es ist zitiert, dass:
Wenn das Ziel ein Ziel-Liste in Klammern eingeschlossen oder in eckigen Klammern: Das Objekt muss ein durchsuchbar mit der gleichen Anzahl von Elementen, wie es die Ziele in der Ziel-Liste, und seine Elemente zugeordnet sind, von Links nach rechts, um die entsprechenden Ziele.
Nachdem es zu Lesen, ich dachte zu schreiben, ein Beispiel wie dieses:
a = 5
b = 4
a, b = a + b, a
print a, b
Meine Vermutung war, dass a und b beide sollte der Wert von 9.
Ich bin jedoch als falsch erwiesen. 'a' hat den Wert 9 und 'b' hat den Wert 5.
Kann jemand mir helfen das besser verstehen? Warum der ältere Wert von 'a' zugewiesen wird, anstatt die neuen? Wie pro die docs, ein Wert zugewiesen werden, erst Recht? Bin ich etwas fehlt?
InformationsquelleAutor der Frage thiruvenkadam | 2012-07-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle Ausdrücke auf der rechten Seite des zuweisungsoperators wird ausgewertet, bevor die Aufgaben gemacht sind.
Aus der Python-tutorial: Erste Schritte in Richtung Programmierung:
Hervorhebung von mir.
Dein code ist funktional äquivalent zu den folgenden:
InformationsquelleAutor der Antwort Mark Byers
Python nicht über eine "Komma-operator", wie in C. Statt, das Komma zeigt an, dass ein Tupel konstruiert werden sollte. Der rechten Seite der
ist ein Tupel mit th zwei Elemente
a + b
unda
.Auf der linken Seite einer Zuweisung das Komma zeigt an, dass die Sequenz Auspacken sollte durchgeführt werden, nach den Regeln, die Sie verstehen:
a
zugeordnet wird, das erste element des Tupelsb
die zweite.InformationsquelleAutor der Antwort Sven Marnach
Kann man sich den Zuordnungen geschieht parallel auf Kopien, anstatt sequenziell und in-place.
Dies ist der Grund, warum in python die Sie nicht brauchen, eine swap-Funktion:
funktioniert ausreichend, ohne dass eine temp-variable
c
.InformationsquelleAutor der Antwort Preet Kukreti