奇怪的行为 Python 3.8 海象算子:链式不等式
Strange Behavior Python 3.8 Walrus Operator: chained inequalities
以下代码:
a,b=1,2
print((x:=a)<2<(z:=b) or z>1>x)
print((x:=a)<1<(y:=b) or y>1>x)
给出以下输出:
False
Traceback (most recent call last):
File "C:/Users/phili/PycharmProjects/ML 1/CodingBat exercises.py", line 56, in <module>
print((x:=a)<1<(y:=b) or y>1>x)
NameError: name 'y' is not defined
这似乎完全不一致。一些变化,如
(x:=1)>=2>(y:=9) or y>=2>x
也给
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
有谁知道发生了什么事吗?
显然是链式运算符 short-circuit。您可以在此示例代码中看到这一点:
>>> 1 < 1 < print("Nope")
False # Nothing else is printed
这可能是因为
a < b < c
本质上是
的short-hand
a < b and b < c
和and
short-circuits:
>>> False and print("Nope")
False
这意味着由于 left-hand 检查为 False,因此永远不会评估右侧,因此永远不会设置 y
。
以下代码:
a,b=1,2
print((x:=a)<2<(z:=b) or z>1>x)
print((x:=a)<1<(y:=b) or y>1>x)
给出以下输出:
False
Traceback (most recent call last):
File "C:/Users/phili/PycharmProjects/ML 1/CodingBat exercises.py", line 56, in <module>
print((x:=a)<1<(y:=b) or y>1>x)
NameError: name 'y' is not defined
这似乎完全不一致。一些变化,如
(x:=1)>=2>(y:=9) or y>=2>x
也给
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
有谁知道发生了什么事吗?
显然是链式运算符 short-circuit。您可以在此示例代码中看到这一点:
>>> 1 < 1 < print("Nope")
False # Nothing else is printed
这可能是因为
a < b < c
本质上是
的short-handa < b and b < c
和and
short-circuits:
>>> False and print("Nope")
False
这意味着由于 left-hand 检查为 False,因此永远不会评估右侧,因此永远不会设置 y
。