为什么“if not a:=say_empty()”会引发语法错误?

2024-06-16 12:34:57 发布

您现在位置:Python中文网/ 问答频道 /正文

PEP 572引入赋值运算符(“walrus运算符”)

下面的代码工作,并输出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),但我没有找到任何关于布尔赋值的内容


Tags: 代码returnifdefnot运算符条件else
1条回答
网友
1楼 · 发布于 2024-06-16 12:34:57

Operator precedence表示:=的优先级低于not。因此not a :=被解读为试图分配给not a,因此出现语法错误

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

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

相关问题 更多 >