每个人都知道在 Python 中赋值不返回值,大概是为了避免在 if
语句上赋值,而通常只是为了进行比较:
>>> if a = b:
File "<stdin>", line 1
if a = b:
^
SyntaxError: invalid syntax
>>> if a == b:
... pass
...
出于同样的原因,人们可能会怀疑对同一语句的多次赋值也是语法错误。
事实上,a = (b = 2)
不是一个有效的表达式:
>>> a = (b = 2)
File "<stdin>", line 1
a = (b = 2)
^
SyntaxError: invalid syntax
所以,我的问题是:为什么 a = b = 2
在 Python 中工作,就像它在赋值语句具有值的其他语言(如 C)中工作一样?
>>> a = b = c = 2
>>> a, b, c
(2, 2, 2)
是否记录了此行为?我在赋值语句文档中找不到任何相关信息:http://docs.python.org/reference/simple_stmts.html#assignment-statements
最佳答案
它就在语法中:
assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)
(target_list "=")+
末尾的小+
表示“一个或多个”。因此 a = b = c = 2
行不包含 3 个赋值语句,而是由 单个赋值语句 和 3 个目标列表组成。
每个目标列表依次仅包含一个目标(在本例中为标识符)。
它也在文本中(强调我的):
An assignment statement [...] assigns the single resulting object to each of the target lists, from left to right.
这会导致有趣的结果:
>>> (a,b) = c = (1,2)
>>> (a, b, c)
(1, 2, (1, 2))
关于python - 赋值语句值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012742/