2017-08-05 106 views
2

当蟒蛇添加布尔表达式,它似乎在括号括起来投下他们进入int当你添加它们,但没有这样做,他们保持类型:为什么(0> 1 + 0> 9)返回False,但((0> 1)+(0> 9))返回0?

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

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

(<expression>) == <expression> 

回答

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

+0

啊。我的印象是,比较运算符优先于算术运算符,但它们是不合理的,否则像1 + 0> 9这样的东西实际上是不直观的。 https://docs.python.org/3/reference/expressions.html#operator-precedence – germanjaber