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)
在PEP 572中得到回答
替代拼写
语义与当前提案大致相同,但拼写不同。
EXPR as NAME:
stuff = [[f(x) as y, x/y] for x in range(5)]由于
EXPR as NAME已经在意义import,except和with语句(用不同的语义),这会造成不必要的混乱或需要特殊的壳体内(例如,禁止这些语句的头中分配)。(请注意,
with EXPR as VAR这并不只是将EXPRto 的值赋给VAR它-它将调用EXPR.__enter__()并将其结果赋给VAR。)更喜欢
:=此拼写的其他原因包括:在
if f(x) as y分配目标中,您不会望着您-它的读法if f x blah blah与视觉上过于相似if f(x) and y。在
as允许子句的所有其他情况下,即使是具有中级技能的读者也可以通过开始该行的关键字来引导该子句(无论如何可选),并且该关键字的语法关系与该as子句紧密相关:Run Code Online (Sandbox Code Playgroud)import foo as bar except Exc as var with ctxmgr() as var相反,赋值表达式不属于
if或while以该行开头,因此我们有意允许在其他上下文中使用赋值表达式。之间的平行节奏
Run Code Online (Sandbox Code Playgroud)NAME = EXPR if NAME := EXPR增强对分配表达式的视觉识别。