Python3中表达式True, True, True == (True, True, True)输出异常原因咨询
为什么这些Python表达式的结果和你预期不一样?
这事儿核心是运算符优先级和Python的表达式分组规则在搞鬼,咱们一步步拆解就清楚了!
1. 拆解 True, True, True == (True, True, True)
在Python里,逗号运算符的优先级比==低,所以这个表达式会被Python自动分组为:
(True, True, (True == (True, True, True)))
咱们一步步计算:
- 先算括号里的
True == (True, True, True):布尔值True和一个包含三个True的元组类型不同、值也不相等,结果是False - 再把前两个
True和这个False用逗号组合成元组,最终就得到了(True, True, False)
2. 为什么 True == (True, True) 结果是False?
这个很直接:你是在拿单个布尔值True和一个包含两个True的元组做比较。Python里不同类型的对象(布尔值和元组)除非有特殊的比较逻辑,否则默认是不相等的,所以结果自然是False。
3. 为什么 True == (True) 结果是True?
这里要注意:(True)不是元组!括号在这里只是用来改变表达式的优先级,(True)等价于单独的True。所以这个表达式其实是:
True == True
两个相同的布尔值比较,结果当然是True。如果要和单元素元组比较,你得写成True == (True,)(注意逗号),这时候结果才会是False。
下次遇到这种看似诡异的表达式,先回忆下运算符优先级表,把表达式按优先级分组后再计算,就不会懵啦!
内容的提问来源于stack exchange,提问作者Sachin Mudaliyar
相关产品推荐
相关产品推荐

