Python中为何`(n1 in l) == True`为True,`n1 in l == True`为False?
Python中
n1 in l == True返回False而非报错的原因 先看你给出的示例代码:
l = [1,2,3,4,5] n1 = 1 print(n1 in l) # 输出 True print((n1 in l) == True) # 输出 True print(n1 in l == True) # 输出 False,而非预期的True或报错
这是因为Python的比较运算符支持链式写法,包括in和==在内的这类运算符优先级相同,Python会按照链式逻辑解析表达式,而非你猜测的单步从左/右到右/左计算。
具体来说,n1 in l == True会被Python解析为:
(n1 in l) and (l == True)
拆解这个链式表达式的执行过程:
- 第一步计算
n1 in l,结果为True - 第二步计算
l == True,由于列表l和布尔值True类型、值均不匹配,结果为False - 第三步计算
True and False,最终结果就是False
这就是代码输出False而非报错的原因——整个过程从未执行n1 in False这一步,自然不会触发TypeError。
而当你加上括号(n1 in l) == True时,强制改变了运算优先级,先计算括号内的n1 in l得到True,再与True比较,结果自然为True。
内容的提问来源于stack exchange,提问作者Sebastián Silva
相关产品推荐
相关产品推荐

