Python 3.6.2中为何11 > 0 is True的结果为False?
为什么
11 > 0 is True在Python中返回False? 嘿,这个问题其实是Python里链式比较和运算符优先级的经典小陷阱,我来给你拆解明白~
核心原因:Python的链式比较规则
在Python中,多个比较运算符(比如>、<、is、==这类)是支持链式书写的,它们会被自动拆解成用逻辑与and连接的多个独立比较,而不是我们直觉里的“先算左边表达式,再和右边的值比较”。
具体到11 > 0 is True,Python会把它解析成:
(11 > 0) and (0 is True)
分步计算验证
我们一步步拆解计算:
- 第一步:
11 > 0的结果是True - 第二步:
0 is True的结果是False(因为True是int的子类,值为1,但is比较的是对象身份,0和True是完全不同的对象) - 第三步:
True and False的结果自然是False
对比你的其他例子
0 is True直接返回False,这和上面第二步的结果完全一致11 > False返回True,是因为Python中False等价于整数0,这个表达式实际等价于11 > 0,结果自然为True
如何得到直觉上的结果?
如果想让表达式先计算11 > 0,再和True做身份比较,只需要加上括号改变运算优先级:
(11 > 0) is True # 结果为True
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

