我今天用这个简单的代码面临一个很奇怪的问题:
var1 = 1
var2 = 2
if var1 > var2 > var3:
print('Does not run')
print('Did not crash')
输出:
Did not crash
为什么这段代码没有在Python 3.7中引发NameError?用简单的比较代替间隔比较会引起NameError异常。这是一个Python错误吗?
var1 > var2 > var3
等于(var1 > var2) and (var2 > var3)
。第一个语句的计算结果为False
,因此由于and
的缘故,Short-circuit evaluation之后的第二个语句根本不被评估。