【发布时间】:2015-11-16 08:30:34
【问题描述】:
(别担心,这不是关于解包元组的另一个问题。)
在 python 中,像 foo = bar = baz = 5 这样的语句将变量 foo、bar 和 baz 分配给 5。它从左到右分配这些变量,这可以通过像这样的更糟糕的例子来证明
>>> 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
但python language reference 声明赋值语句的格式为
(target_list "=")+ (expression_list | yield_expression)
在分配时,首先评估expression_list,然后进行分配。
既然bar = 5 不是expression_list,那么foo = bar = 5 行怎么可能有效?如何解析和评估一行上的这些多个分配?我读错了语言参考吗?
【问题讨论】:
-
注意
(target_list "=")+中的+,表示一个或多个副本。在foo = bar = 5中,有两个(target_list "=")产生式,而expression_list部分只是5。 -
啊哈!这就是我所缺少的。如果您将此作为答案,我可以接受。谢谢!
标签: python variable-assignment