大家都知道,在 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 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 个目标列表。
每个目标列表依次仅包含一个目标(在本例中为标识符)。
正文中也有(强调我的):
赋值语句 [...] 将单个结果对象分配给每个目标列表, 从左到右。
这可能会产生有趣的结果:
>>> (a,b) = c = (1,2)
>>> (a, b, c)
(1, 2, (1, 2))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)