赋值语句值

2024-05-09

大家都知道,在 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(使用前将#替换为@)

赋值语句值 的相关文章

随机推荐