Python中in语句与布尔值比较疑问:为何1 in [1] == True返回False?
Python中
1 in [1] == True的执行逻辑解析 核心原因是Python的链式比较特性,以及in和==属于同一优先级的比较运算符,导致语句的解析方式和直觉里的不一样。
逐个分析三个语句:
第一个语句:
print(1 in [1] == True)
Python会把这个表达式解析成:(1 in [1]) and ([1] == True)拆解计算:
1 in [1]的结果是True[1] == True的结果是False(列表和布尔值类型不同,直接判定不相等)
最终True and False的结果就是False,这就是输出False的原因。
第二个语句:
print((1 in [1]) == True)
括号强制改变了运算顺序,先计算1 in [1]得到True,再和True做相等比较,结果自然是True。第三个语句:
print(1 in ([1] == True))
先计算[1] == True得到False,接着尝试判断1 in False——但布尔值不是可迭代对象,所以直接抛出TypeError。
补充说明
Python里的比较运算符(包括in、==、<、>等)优先级相同,并且支持链式写法,比如a < b < c等价于a < b and b < c,这里的1 in [1] == True就是链式比较的一种,只是结合了成员判断和相等判断两种操作。
内容的提问来源于stack exchange,提问作者Anton Ovsyannikov
相关产品推荐
相关产品推荐

