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