赋值表达式 `:=` 如何在 Python 中工作?

How do Assignment Expressions `:=` work in Python?

我已阅读 PEP 572 关于赋值表达式的内容,我发现这段代码是一个清晰的示例,我可以在其中使用它:

while line := fp.readline():
    do_stuff(line)

但我很困惑,根据我的阅读,它应该像正常赋值一样工作,但 return 值。但它似乎不像那样工作:

>>> w:=1
  File "<stdin>", line 1
    w:=1
     ^
SyntaxError: invalid syntax

现在经过修改,我实现了以下工作:

>>> (w:=1)
1

但感觉很不自然。它是唯一需要括号的运算符:

>>> w = 1
>>> w + w
2
>>> w == w
True
>>> w is w
True
>>> w < w
False

解析器对它的处理方式与 Python 中的其他任何内容都不同,这是否有原因...?我觉得我错过了什么。这不仅仅是一个运算符。

在 REPL 中使用 := 分配变量会非常有用,因为值会显示。


(更新: 我不鼓励对这个敏感话题进行自以为是的讨论。请避免发表有用的评论或答案。)

作为GreenCloakGuy mentioned, it is there to avoid confusion, as said here,我认为这一行总结了一切:

there is no syntactic position where both = and := are valid.

它也使这些东西无效,因为太混乱了:

y0 = y1 := f(x)
foo(x = y := f(x))