为什么 Python 中的命名表达式需要专用语法(:=,Walrus 运算符)?

Mac*_*iek 3 python python-3.x

我真的不明白为什么需要:=为命名表达式引入专用语法(运算符),如PEP572 中所述。例如,应该写:

if (match := pattern.search(data)) is not None:
    # Do something with match
Run Code Online (Sandbox Code Playgroud)

为什么不简单if (match = pattern.search(data))?如果是因为向后兼容,那么请注意以下表达式:(x = 1)raises SyntaxError: invalid syntax,因此允许它并开始将其解释为命名表达式就足够了,而不是引入 new:=运算符,顺便说一句,在大多数情况下可能是反正被括号包围。

我觉得我没有看到其他人都得到的明显的东西;-)

Kon*_*lph 5

这是因为显式优于隐式,并且:=使您执行赋值的意图清晰;而 using=很容易是拼写错误的结果,这就是为什么=故意在 Python 中的表达式中不起作用的原因。

事实上,在支持它的语言中,不小心在比较中使用了=代替==是一个常见的错误来源。