赋值表达式 `:=` 如何在 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))
我已阅读 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))