(non ti preoccupare, questo non è un altro domanda circa il disimballaggio tuple.)Python Più istruzioni di assegnazione in una linea
In pitone, una dichiarazione come foo = bar = baz = 5
assegna le variabili foo, bar e baz a 5. assegna queste variabili da sinistra a destra, come si può dimostrato da esempi più maliziose come
>>> 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
Ma gli stati che python language reference istruzioni di assegnamento hanno la forma
(target_list "=")+ (expression_list | yield_expression)
e su incarico viene valutato prima lo expression_list
e quindi avviene l'assegnazione.
Quindi, come può essere valida la linea foo = bar = 5
, dato che bar = 5
non è un expression_list
? In che modo questi compiti multipli su una riga vengono analizzati e valutati? Sto leggendo il riferimento al linguaggio sbagliato?
Si noti '' 'in' (target_list "=") + ', che significa una o più copie. In 'foo = bar = 5', ci sono due produzioni' (target_list "=") ', e la parte' expression_list' è semplicemente '5'. –
Aha! Questo è quello che mi mancava. Se fai questa risposta, posso accettarla. Grazie! – mwcvitkovic