为何表达式1 is not '1' == True返回False?带括号却为True?
为什么Python表达式
1 is not '1' == True返回False? 这问题的核心在于你可能没注意到Python中比较运算符的链式特性——所有比较运算符(包括is not、==、!=、<、>等)优先级相同,并且会被解释成链式的逻辑与(and)关系,而不是普通的左结合运算。
无括号表达式的实际拆解
当你写1 is not '1' == True时,Python会把它解析成:
(1 is not '1') and ('1' == True)
我们一步步计算:
1 is not '1':整数1和字符串'1'是完全不同的对象,所以结果是True。'1' == True:Python中布尔类型是整数的子类(True等价于1,False等价于0),但字符串和布尔值直接比较时不会做隐式类型转换,所以'1'和True不相等,结果是False。
最后True and False的结果就是False,这就是无括号时输出False的原因。
带括号的两种情况验证
你添加括号后改变了运算顺序,自然结果不同:
1 is not ('1' == True):先计算括号内的'1' == True得到False,再判断1 is not False——1和False是不同的对象,返回True。(1 is not '1') == True:先算括号内的1 is not '1'得到True,再判断True == True,结果当然是True。
补充:Python比较运算符的链式规则
举个更直观的例子,a < b < c会被解析成(a < b) and (b < c),而不是(a < b) < c——这和很多其他编程语言的行为不同,也是容易踩坑的点。对于同优先级的比较运算符,Python都会按这种链式逻辑处理,而不是左到右依次运算。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

