首页 > 解决方案 > 为什么“if not a := say_empty()”会引发 SyntaxError?

问题描述

PEP 572引入了赋值运算符(“海象运算符”)。

以下代码有效,并输出empty

def say_empty():
    return ''

if a := say_empty():
    print("not empty")
else:
    print("empty")

我试图否定条件:

def say_empty():
    return ''

if not a := say_empty():
    print("empty")
else:
    print("not empty")

这引发了一个SyntaxError

    if not a := say_empty():
       ^
SyntaxError: cannot use assignment expressions with operator

给定的错误很清楚,但是我想知道为什么要设置此限制。

PEP 572 解释了为什么在迭代中使用赋值是有问题的(并且会引发SyntaxError),但我没有找到任何关于布尔值的信息。

标签: pythonpython-3.xwalrus-operator

解决方案


运算符优先级表示:=的优先级低于not。所以not a :=被读作试图分配给not a,因此语法错误。

您可以使用括号来阐明含义:

if not (a := say_empty()):
    ...

推荐阅读