运算符的优先级:>和==

22 浏览
0 Comments

运算符的优先级:>和==

我正在尝试猜测哪个运算符具有优先级:大于(>)还是等于(==)。这是我的实验结果:\n

>>> 5 > 4 == 1
False

\n据我所知,这有两个可能的解决方案。\n

>>> (5 > 4) == 1
True
>>> 5 > (4 == 1)
True

\n两者都没有返回False,那么Python是如何解析第一个代码的呢?

0
0 Comments

运算符的优先级导致了这个问题的出现。与C/C++和大多数其他语言不同,Python允许您像进行普通数学运算一样链接比较运算符。根据文档的说明:比较可以任意链接,例如,x < y <= z 等价于 x < y and y <= z,只不过当发现 x < y 为假时,y 只被计算一次(但在两种情况下,当 x < y 为假时,z 都不被计算)。因此,这个表达式:5 > 4 == 1 实际上被解释为:5 > 4 and 4 == 1(只不过4只被计算一次),然后变成:True and False,即False

然而,使用括号会改变Python解释比较的方式。这个表达式:(5 > 4) == 1 变成:True == 1,即True。同样,5 > (4 == 1) 变成:5 > False,即True

由于PEP 0285的原因,bool被定义为int的子类,并且True == 1False == 0。所以,链接比较时的解释是5 > 4 and 4 == 1。

这个问题的出现和解决方法如上所述。

0