Python比较运算符疑问:print(bool(7>8)==False==True)为何返回False?
Python链式比较与运算符优先级问题解析
一、为什么bool(7>8)==False==True返回False?
你误以为这个表达式会按左结合先算(bool(7>8)==False)得到True,再算True==True得到True?其实Python的链式比较逻辑和普通左结合计算不一样。
在Python中,形如a op1 b op2 c的链式比较,等价于a op1 b and b op2 c,而非(a op1 b) op2 c。
放到你的例子里:bool(7>8)的结果是False,原表达式变为False == False == True,实际等价于:
False == False and False == True
计算后:False == False是True,False == True是False,最后True and False的结果就是False,这就是输出为False的原因。
如果要按你预想的左结合逻辑计算,必须手动加括号:
print( (bool(7>8)==False) == True )
这个表达式才会返回True。
二、<、>、>=、<=与==、!=的优先级是否相同?
是的,<、>、>=、<=这些关系运算符,和==、!=这些相等运算符的优先级完全相同,并且它们都遵循左结合规则。但要注意,链式比较是Python的特殊语法,不是单纯的左结合计算——它会拆解成两个比较表达式用and连接,而且中间的操作数只会被计算一次。
内容的提问来源于stack exchange,提问作者Aman Raj Srivastva
相关产品推荐
相关产品推荐

