为什么 "if not a := say_empty()" 引发 SyntaxError?
Why does "if not a := say_empty()" raise a 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
),但我没有找到任何关于布尔值的信息。
Operator precedence表示:=
的优先级低于not
。所以 not a :=
被读取为试图分配给 not a
,因此出现语法错误。
可以用括号来说明意思:
if not (a := say_empty()):
...
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
),但我没有找到任何关于布尔值的信息。
Operator precedence表示:=
的优先级低于not
。所以 not a :=
被读取为试图分配给 not a
,因此出现语法错误。
可以用括号来说明意思:
if not (a := say_empty()):
...