Seite 1 von 1
Variablen mit Komma getrennt
Verfasst: Sonntag 22. November 2009, 15:58
von Vakt
Hallo zusammen,
was bewirken denn die Kommata in Folgendem Code:
def fib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
Ich habe schon diverse meiner Bücher durchgewälzt aber irgendwie finde ich keine Antwort.
Es scheint ja nicht das Selbe zu sein wie:
def fib(n):
a=0
for i in range(n):
a= b
b = a + b
return a
Denn da kommen bei mir unterschiedliche Ergebnisse heraus
Verfasst: Sonntag 22. November 2009, 16:02
von Hyperion
Hallo und Willkommen im Forum!
Es gibt hier code-Tags. Darin solltest Du die quellcode-Schnipsel packen - sonst kann man den Code schwer lesen oder testen, da die Einrückungen verloren gehen.
[ code=py ] - ohne die Leerzeichen.
Zum Problem:
Du meinst sicher Zeile 2:
Da würde ich stumpf mal sagen: Öffne die (eine) Python-Shell und gib die Zeile ein und gib Dir danach einfach mal per print aus, an welchen Wert a und b nach der Zeile gebunden sind!

Re: Variablen mit Komma getrennt
Verfasst: Sonntag 22. November 2009, 16:16
von Nocta
Vakt hat geschrieben:Es scheint ja nicht das Selbe zu sein wie:
Code: Alles auswählen
def fib(n):
a=0
for i in range(n):
a= b
b = a + b
return a
Denn da kommen bei mir unterschiedliche Ergebnisse heraus
Das hat einen ganz einfachen Grund: Wenn du a,b = b, a+b schreibst, wird a = b zugewiesen und b = a+b ABER mit dem alten Wert von a.
Wenn du das getrennt in 2 Zeilen schreibst, hast du den Wert schon überschrieben, was zu einem anderen Ergebnis führt.
Der äquivalente Code wäre dann:
Edit:
http://docs.python.org/tutorial/datastr ... -sequences
This is called, appropriately enough, sequence unpacking and works for any sequence on the right-hand side. Sequence unpacking requires the list of variables on the left to have the same number of elements as the length of the sequence. Note that multiple assignment is really just a combination of tuple packing and sequence unpacking.
Verfasst: Sonntag 22. November 2009, 16:20
von Vakt
Achsooo
Oh man natürlich

Jetzt macht das alles Sinn.
Vielen vielen Dank euch beiden =)