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
Variablen mit Komma getrennt
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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!
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:
Code: Alles auswählen
a, b = 0, 1
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.Vakt hat geschrieben:Es scheint ja nicht das Selbe zu sein wie:Denn da kommen bei mir unterschiedliche Ergebnisse herausCode: Alles auswählen
def fib(n): a=0 for i in range(n): a= b b = a + b return 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:
Code: Alles auswählen
a_alt = a
a = b
b = a_alt + b
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.Code: Alles auswählen
>>> t = 12345, 54321, 'hello!' [...] >>> x, y, z = t
Zuletzt geändert von Nocta am Sonntag 22. November 2009, 16:21, insgesamt 1-mal geändert.