如何才能将赋值语句;x=y:=f(x)";在Python中使用赋值表达式时需要执行哪些操作?

如何才能将赋值语句;x=y:=f(x)";在Python中使用赋值表达式时需要执行哪些操作?,python,pep,python-3.8,python-assignment-expression,Python,Pep,Python 3.8,Python Assignment Expression,我读到: #Python新闻:Guido接受了PEP 572。Python现在有赋值表达式 if (match := (pattern.search) pattern.search(data)) is not None: print((match.group) mo.group(1)) filtered_data = [y for x in data if (y := f(x)) is not None] (代码第二行中的修正) 如图所示,描述了以下内容: 这是一个使用符号NAM

我读到:

#Python新闻:Guido接受了PEP 572。Python现在有赋值表达式

 if (match := (pattern.search) pattern.search(data)) is not None:
    print((match.group) mo.group(1))

 filtered_data = [y for x in data if (y := f(x)) is not None]
(代码第二行中的修正)

如图所示,描述了以下内容:

这是一个使用符号
NAME:=expr
为表达式中的变量赋值的建议

我已经阅读了描述和示例,我认为这是一种避免重复调用或分配的方便方法,因此,不要:

match1 = pattern1.match(data)
match2 = pattern2.match(data)
if match1:
    return match1.group(1)
elif match2:
    return match2.group(2)
或者更高效的:

match1 = pattern1.match(data)
if match1:
    return match1.group(1)
else:
    match2 = pattern2.match(data)
    if match2:
        return match2.group(2)
现在可以说:

if match1 := pattern1.match(data):
    return match1.group(1)
elif match2 := pattern2.match(data):
    return match2.group(2)
同样,人们现在可以说:

if any(len(longline := line) >= 100 for line in lines):
    print("Extremely long line:", longline)
然而,我不明白政治公众人物中给出的这个例子是如何无效的:

y0=(y1:=f(x))
是否正确?怎么用呢?

对于那些想知道这在哪里可用的人,请注意:我已经安装了,但它在那里不工作,因为PEP当前显示为“状态:草稿”。然而,政治公众人物谈到了概念证明/参考实现(,因此,使用包括它的Python 3.8 alpha 0版本是一个问题。

正如政治公众人物所说

不允许在赋值语句右侧的顶层使用未限定的赋值表达式;例如,不允许出现以下情况:

y0 = y1 := f(x)  # INVALID
同样,包含这条规则是为了避免用两种视觉上相似的方式来表达同一件事

以及

如上文“例外情况”一节所述,不允许与
=
处于同一级别。如果需要不同的分组,应使用括号


这是。@user2357112是的,谢谢,这是我从这里取的。这就是为什么我问如何才能做到这一点
y0 = y1 := f(x)  # INVALID
# INVALID
x = y := 0

# Valid alternative
x = (y := 0)