为何Python中条件表达式3 > 5 in range(10)返回False?
为什么
3 > 5 in range(10)返回False,而False in range(10)返回True? 哈哈,这个问题其实是Python两个容易被忽略的特性在搞鬼——链式比较和布尔值与整数的关系,我来给你掰扯清楚:
先拆解3 > 5 in range(10)的逻辑
你可能直觉上会认为Python会先算3 > 5得到False,再判断False in range(10),但这是错的!Python支持链式比较,连续的比较运算符会自动拆解成用and连接的两个独立比较。也就是说:
3 > 5 in range(10)
等价于:
(3 > 5) and (5 in range(10))
现在拆分计算:
3 > 5的结果是False5 in range(10)的结果是True
布尔逻辑False and True的结果是False,所以整个表达式最终返回False。
再看False in range(10)的逻辑
在Python中,bool类型是int类型的子类,False本质上就是整数0,True就是整数1。所以当你执行False in range(10)时,Python实际是在检查0是否在range(10)中——而range(10)包含从0到9的所有整数,因此这个判断会返回True。
总结
这两个表达式的“矛盾”其实是两个不同Python特性的叠加:第一个是链式比较的规则改变了运算顺序,第二个是布尔值与整数的隐式等价性。搞清楚这两点,就不会再被类似的问题绕晕啦~
内容的提问来源于stack exchange,提问作者VVV
相关产品推荐
相关产品推荐

