Python-Mehrfachzuordnungsanweisungen in einer Zeile

(Keine Sorge, dies ist nicht eine andere Frage über das Auspacken von Tupeln.)

In python eine Anweisung wie foo = bar = baz = 5 weist der Variablen foo, bar, baz und 5. Es weist diese Variablen von Links nach rechts, wie kann bewiesen werden, indem schlimmere Beispiele wie

>>> foo[0] = foo = [0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> foo = foo[0] = [0]
>>> foo
[[...]]
>>> foo[0]
[[...]]
>>> foo is foo[0]
True

Aber die python language reference besagt, dass Zuweisungsanweisungen haben die form

(target_list "=")+ (expression_list | yield_expression)

und im Auftrag der expression_list wird zuerst ausgewertet und dann das zuweisen geschieht.

Also, wie kann die Linie foo = bar = 5 gültig ist, gegeben, dass bar = 5 ist nicht ein expression_list? Wie sind diese mehrere Zuweisungen in einer Zeile immer analysiert und ausgewertet? Lese ich das Referenzhandbuch falsch?

InformationsquelleAutor der Frage mwcvitkovic | 2015-08-22

Schreibe einen Kommentar