【问题标题】:Why isn't the walrus operation a valid statement?为什么海象行动不是一个有效的陈述?
【发布时间】:2021-10-06 12:17:42
【问题描述】:

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

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

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

>>> 5 + 3 - 1
7 

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

>>> (x := 1)
1

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

【问题讨论】:

  • 赋值不是表达式
  • 看看exceptional cases in PEP572。它解释了这种情况
  • 因为这不是海象的用法,并且不鼓励海象在正常作业中使用。 PEP 说得很好。括号只是使海象上下文不作为独立行可见的一种方式。
  • @Chris 好吧,赋值表达式是 :) 但是语法明确禁止将赋值表达式用作表达式语句,如 PEP 中所述。

标签: python terminal walrus-operator


【解决方案1】:

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

顶层禁止使用无括号的赋值表达式 的表达式语句。示例:

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

这个 包含规则以简化用户之间的选择 赋值语句和赋值表达式 -- 没有 两者都有效的句法位置

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    相关资源
    最近更新 更多