为什么海象行动不是一个有效的陈述?
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))
有效的原因。
我在终端上做了一些 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))
有效的原因。