Python中布尔表达式的意外结果

Python中布尔表达式的意外结果,python,python-2.x,operator-precedence,Python,Python 2.x,Operator Precedence,可能重复: 为什么在Python中表达式010==True的计算结果为(15>10)==True,则表达式将简化为print True==True,其计算结果显然为True。如果将15>10==True计算为15>(10==True)则表达式简化为15>False,该表达式的计算结果也为True。这两种解释都与表达式的实际值相矛盾(False) 我能理解15>1==True对True的求值,因为1==True是真的,但对15>10==True的解释对我来说没有意义 摘要:在Python 2中,为

可能重复:
为什么在Python中表达式0<0==0返回False

Python 2 REPL的以下输出让我感到困惑:

>>> 15>10==True
False
>>> 15>1==True
True
>>> 15>2==True
False
>>> 15>False
True
如果
15>10==True
的计算结果为
(15>10)==True
,则表达式将简化为
print True==True
,其计算结果显然为
True
。如果将
15>10==True
计算为
15>(10==True)
则表达式简化为
15>False
,该表达式的计算结果也为
True
。这两种解释都与表达式的实际值相矛盾(
False

我能理解
15>1==True
True
的求值,因为
1==True
是真的,但对
15>10==True
的解释对我来说没有意义

摘要:在Python 2中,为什么
15>10==True
计算为
False

这是因为在Python中。也就是说,
15>10==True
实际计算为:

15 > 10 and 10 == True
这是
False

另一方面,
15>1==True

15 > 1 and 1 == True
其计算结果为
True


引用文件:

与C不同,Python中的所有比较操作都具有相同的优先级,比任何算术、移位或按位操作的优先级都低。同样与C不同的是,像a
比较::=或_expr(comp _运算符或_expr)*

comp|u操作符::=“|”=“|”>=“|”我相信您在不知不觉中遇到了python的“整洁”功能:

与C不同,像a 在该表达式中,True正好被视为1,即:

In [13]: 15>10==1
Out[13]: False
但随后将==替换为>运算符中的,我们将看到新表达式如何按照上面引用的规则为真:

In [14]: 15>10>1
Out[14]: True
In [13]: 15>10==1
Out[13]: False
In [14]: 15>10>1
Out[14]: True