Variablen mit Komma getrennt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Vakt
User
Beiträge: 2
Registriert: Samstag 14. November 2009, 12:50

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
Benutzeravatar
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:

Code: Alles auswählen

a, b = 0, 1
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! :-)
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

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:

Code: Alles auswählen

a_alt = a
a = b
b = a_alt + b
Edit:
http://docs.python.org/tutorial/datastr ... -sequences

Code: Alles auswählen

>>> t = 12345, 54321, 'hello!'
[...]
>>> x, y, z = t
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.
Zuletzt geändert von Nocta am Sonntag 22. November 2009, 16:21, insgesamt 1-mal geändert.
Vakt
User
Beiträge: 2
Registriert: Samstag 14. November 2009, 12:50

Achsooo :D

Oh man natürlich ;)
Jetzt macht das alles Sinn.

Vielen vielen Dank euch beiden =)
Antworten