运算符的优先级:>和==
- 论坛
- 运算符的优先级:>和==
22 浏览
匿名的
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 == 1
,False == 0
。所以,链接比较时的解释是5 > 4 and 4 == 1。
这个问题的出现和解决方法如上所述。