gpt4 book ai didi

python - 赋值语句值

转载 作者:太空狗 更新时间:2023-10-29 16:54:39 24 4
gpt4 key购买 nike

每个人都知道在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com