这在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 yassignment 中,target 不会跳出来——它只是读起来像if f x blah blah,并且在视觉上与if
f(x) and y.
在允许使用从句的所有其他情况下as,即使是具有中介技能的读者也会被引导到该行开头的关键字来预测该子句(无论是可选的),并且语法将该关键字与该as子句紧密联系在一起:
import foo as bar
except Exc as var
with ctxmgr() as var
相反,赋值表达式不属于开始行的ifor while
,我们有意在其他上下文中也允许赋值表达式。
之间的平行节奏
NAME = EXPR
if NAME := EXPR
增强了赋值表达式的视觉识别。