[Python-de] Re: for unpacking

[email protected] (Stefan Ram) 6 Aug 2024 21:35:30 GMT
Newsgroups gmane.comp.python.general.german
Organization Stefan Ram
Message-ID <[email protected]>
Patrick Rudin <[email protected]> schrieb oder zitierte:
>Vermutlich habe ich irgendwas falsch verstanden, wie unpacking 
>funktioniert. Jedenfalls:
>zahlen = [[5,5,5]]
>zahlen.append([9,9,9])
>for t in zahlen:
>     t[1] += t[2]

  t wird hier beim ersten Durchlauf an [5,5,5] gebunden, so daß
  t[1]+=t[2] dann die mittlere 5 zu 10 verändert.

  Eine Zuweisung der Form

Name[ ... ]= ...

  ändert die Bindung einer Komponente der Liste "Name" (wenn "Name"
  an eine Liste gebunden wurde). Hier war dieses sogenannte "Ziel"
  der Zuweisung die Stelle in der Mitte der Liste [5,5,5].

>nummern = [[5,5,5]]
>nummern.append([9,9,9])
>for a,b,c in nummern:
>     b += c

  Hier wurde b beim ersten Schleifendurchlauf zunächst an den
  Wert 5 gebunden. Die Zuweisung "b += c" bindet den Namen
  "b" nun an die Summe von b und c, aber ändert nichts an
  der Liste [5,5,5]. 

  Eine Zuweisung der Form

Name = ...

  kann nie etwas an einer Liste ändern, sondern ändert immer nur
  die Bindung des Namens "Name".

>Ich kapier das nicht. Funktioniert unpacking nur lesend? Oder wie kann 
>ich einen Wert während der For-Schlaufe ändern, ohne die umständliche 
>Notation zu verwenden?

  Technisch gesehen kann man Werte gar nicht verändern (2 ist
  immer 2 [1]), sondern nur Ziele an Werte binden. Ein Ziel
  kann eine Stelle in einer Liste sein, dann nimmt man

Name[ ... ]= ...

  oder ein Name, dann nimmt man

Name = ...

  . (Siehe auch: "7.2 Assignment statements" in "The Python Language
  Reference Release 3.13.0a0").

1 In einigen Python-Implementationen kann man es durch einen
  Trick erreichen, daß "print( 2 )" zur Ausgabe von "3" führt,
  aber das ist wohl nicht portabel und würde bei normaler
  Programmierung nicht verwendet werden.
_______________________________________________
python-de Mailingliste -- [email protected]
Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected]
https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: [email protected]