为什么海象行动不是一个有效的陈述?

Why isn't the walrus operation a valid statement?

我在终端上做了一些 python,在我写 x := 1 的时候它显示了一个语法错误。

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

我知道海象运算符是一个表达式,但其他表达式可以完美地工作。

>>> 5 + 3 - 1
7 

即使是海象运算也在括号内工作。

>>> (x := 1)
1

所以我的问题是,为什么所有其他表达式都可以作为语句有效,而海象却不是?

来自 PEP 572,"Exceptional cases"(强调我的):

Unparenthesized assignment expressions are prohibited at the top level of an expression statement. Example:

y := f(x)  # INVALID
(y := f(x))  # Valid, though not recommended

This rule is included to simplify the choice for the user between an assignment statement and an assignment expression -- there is no syntactic position where both are valid.

在语法中排除裸赋值表达式很简单。仅禁止 某些 括号表达式(即包含赋值表达式的表达式)同时仍然允许其他表达式会复杂得多,这就是 (y := f(x)) 有效的原因。