(别担心,这不是关于解包元组的另一个问题.)
在python中,语句foo = bar = baz = 5将变量foo,bar和baz赋值为5.它从左到右分配这些变量,这可以通过像nastier这样的例子来证明
>>> 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
Run Code Online (Sandbox Code Playgroud)
但python语言参考声明赋值语句具有该形式
(target_list "=")+ (expression_list | yield_expression)
Run Code Online (Sandbox Code Playgroud)
在分配时,expression_list首先评估,然后分配.
那么这条线怎么可能foo = bar = 5是有效的,因为它bar = 5不是一个expression_list?如何在一行上解析和评估这些多项任务?我读错了语言参考吗?