2

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

即为什么认为写作更可取

while (command := input("> ")) != "quit":
    print("You entered:", command)

而不是

while input("> ") as command != "quit":
    print("You entered:", command)
4

1 回答 1

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 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

增强了赋值表达式的视觉识别。

于 2019-09-20T14:12:38.130 回答