为什么Python中print(3 > 0 == True)的执行结果为False?
Python链式比较规则导致结果差异的原因
你对比较运算符的运算逻辑理解存在偏差,Python的比较运算符并不单纯遵循从左到右的优先级计算,而是默认支持链式比较语法。
Python中,连续出现的比较运算符不会按左到右顺序先算前半段再用结果算后半段,形如a op1 b op2 c的语句,实际等价于(a op1 b) and (b op2 c),且中间的操作数b只会被求值一次。
对于print(3 > 0 == True)的执行逻辑:
实际等价于执行print( (3 > 0) and (0 == True) )
- 第一步计算
3 > 0,结果为True - 第二步计算
0 == True:Python中布尔值是整数的子类,True对应的整数值为1,False对应的整数值为0,因此0和1相等判断的结果为False - 逻辑与运算
True and False的最终结果为False,所以输出为False
而你给出的两个加括号的语句,因为括号强制修改了运算优先级,打破了链式比较规则,所以结果不同:
print((3 > 0) == True):先算括号内得到True,再和True做相等判断,结果为Trueprint(3 > (0 == True)):先算括号内0 == True得到False,False对应整数值0,计算3 > 0结果为True
内容的提问来源于stack exchange,提问作者Golden Rockefeller
相关产品推荐
相关产品推荐

