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:

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! :-)

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:

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.

Verfasst: Sonntag 22. November 2009, 16:20
von Vakt
Achsooo :D

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

Vielen vielen Dank euch beiden =)