Python如何解析表达式`7 in x == True`?
Python中
a in b == True的表达式解析逻辑 有人写出了这样的代码:
if nota in lista1 == True: ...
测试后发现,7 in x == True的结果既不等于(7 in x) == True(前者返回False,后者返回True),也不会像7 in (x == True)那样报错,这是因为Python的比较运算符链式特性在起作用。
核心逻辑:比较运算符的链式处理
在Python中,所有比较类运算符(包括in、not in、==、>、<等)的优先级相同,并且支持链式写法。表达式a op1 b op2 c会被Python解析为:
a op1 b and b op2 c
而且中间的b只会被计算一次。
对7 in x == True的具体解析
回到测试代码里的7 in x == True,这里in和==都是比较运算符,所以会被链式解析为:
7 in x and x == True
代入x = [3,7]:
7 in x的结果是Truex == True的结果是False(列表和布尔值类型不同,直接不相等)
所以整个表达式等价于True and False,最终返回False,和你在REPL里得到的结果一致。
对比其他两种加括号的情况
(7 in x) == True:先计算7 in x得到True,再和True比较,结果自然是True7 in (x == True):先计算x == True得到False,然后尝试判断7是否在布尔值False中,但布尔类型不是可迭代对象,所以抛出TypeError
正确的写法建议
实际上,完全不需要把in的结果和True显式比较,直接写:
if nota in lista1: ...
就足够了,因为nota in lista1本身就会返回布尔值,这样写更简洁、符合Python的编码规范。
内容的提问来源于stack exchange,提问作者Solomon Slow
相关产品推荐
相关产品推荐

