了解新python:=运算符的原因

Ric*_*ann 2 python language-design python-3.x python-3.8 python-assignment-expression

这是一个元编程问题:我想了解为什么python开发人员在new中引入了另一个运算符:=。我知道这是干什么的 但是,我想知道为什么开发人员选择一个新的符号而不是重复使用例如as运算符。

即为什么认为最好写

while (command := input("> ")) != "quit":
    print("You entered:", command)
Run Code Online (Sandbox Code Playgroud)

而不是

while input("> ") as command != "quit":
    print("You entered:", command)
Run Code Online (Sandbox Code Playgroud)

Chr*_*nds 5

PEP 572中得到回答

替代拼写

语义与当前提案大致相同,但拼写不同。

EXPR as NAME

stuff = [[f(x) as y, x/y] for x in range(5)]

由于EXPR as NAME已经在意义importexceptwith 语句(用不同的语义),这会造成不必要的混乱或需要特殊的壳体内(例如,禁止这些语句的头中分配)。

(请注意,with EXPR as VAR这并不只是将EXPR to 的值赋给VAR它-它将调用EXPR.__enter__()并将其结果赋给 VAR。)

更喜欢:=此拼写的其他原因包括:

if f(x) as y分配目标中,您不会望着您-它的读法if f x blah blah与视觉上过于相似if f(x) and y

as允许子句的所有其他情况下,即使是具有中级技能的读者也可以通过开始该行的关键字来引导该子句(无论如何可选),并且该关键字的语法关系与该as子句紧密相关:

import foo as bar

except Exc as var

with ctxmgr() as var
Run Code Online (Sandbox Code Playgroud)

相反,赋值表达式不属于ifwhile 以该行开头,因此我们有意允许在其他上下文中使用赋值表达式。

之间的平行节奏

NAME = EXPR

if NAME := EXPR
Run Code Online (Sandbox Code Playgroud)

增强对分配表达式的视觉识别。