为什么(0> 1 + 0> 9)返回False,但((0> 1)+(0> 9))返回0?

时间:2017-08-05 03:22:00

标签: python python-2.7 python-3.x

在python中添加布尔表达式时,似乎将它们括在括号中会在添加它们时将它们转换为int,但不这样做会维护它们的类型:

>>> ((0>1) + (0>9))
0
>>> (0>1 + 0>9)
False
>>> (0>1 + (0>9))
False

这是为什么?在我看来,括号只应该用于改变操作的顺序(除了你使用括号来定义元组的一些情况),而不是内容的类型,所以我希望:

(<expression>) == <expression>

1 个答案:

答案 0 :(得分:5)

>>> ((0>1) + (0>9)) 
0

这是整数加法,因为False是整数实例。 bool未定义添加,因此在父类False + False上解析int.__add__

>>> (0>1 + 0>9)
False

这是一个链式比较,伪装成0 > 1 > 9

>>> (0>1 + (0>9))
False

这是一次定期比较,伪装成0 > 1 + False