2017-08-05 109 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