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

赋值表达式“:=”在Python中如何工作?,python,python-3.8,Python,Python 3.8,我已经阅读了有关赋值表达式的内容,我发现这段代码是我可以使用它的一个清晰示例: while line := fp.readline(): do_stuff(line) 但我很困惑,从我读到的,它应该像正常赋值一样工作,但返回值。但它似乎不是这样工作的: >>> w:=1 File "<stdin>", line 1 w:=1 ^ SyntaxError: invalid syntax 但感觉很不和谐。它是唯一需要括号的运算符: &g

我已经阅读了有关赋值表达式的内容,我发现这段代码是我可以使用它的一个清晰示例:

while line := fp.readline():
    do_stuff(line)
但我很困惑,从我读到的,它应该像正常赋值一样工作,但返回值。但它似乎不是这样工作的:

>>> w:=1
  File "<stdin>", line 1
    w:=1
     ^
SyntaxError: invalid syntax
但感觉很不和谐。它是唯一需要括号的运算符:

>>> w = 1
>>> w + w
2
>>> w == w
True
>>> w is w
True
>>> w < w
False
>>w=1
>>>w+w
2.
>>>w==w
真的
>>>w是w
真的
>>>w
解析器对它的处理与Python中的其他任何东西都有区别吗。。。?我觉得我错过了什么。这不仅仅是一个操作员

在REPL中使用
:=
将变量分配为显示的值将非常有用


(更新: 我不鼓励在这个敏感话题上进行固执己见的讨论。请避免发表有用的评论或答案以外的其他评论或答案。)

如前所述,这是为了避免混淆,如前所述,我认为这句话概括了这一切:

=和:=都有效的语法位置不存在

这也使得类似的事情无效,因为太令人困惑了:

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

天哪,这太邪恶了…@PhilipTzou当我第一次看到它时,我也有同样的感觉,但它可读性强,非常有用。PEP 572-这是为了避免歧义。也就是说,我不确定这个问题讨论的是什么(功能似乎按预期工作?),我不认为StackOverflow是讨论这个问题的正确场所。while line:=fp.readline():
也没有意义。对于fp.readline():中的line,它可以简单地用一种更具python风格的方式取代
,甚至可以用
代替fp中的line:
。有趣的是,当前alpha版本中的一些假定无效的用法示例。
y0 = y1 := f(x)
foo(x = y := f(x))