2014-11-09 19 views
18

Próbuję zgadnąć, który operator ma priorytet: > (większy niż) lub == (równy). To jest mój eksperyment:Priorytet operatorów:> i ==

>>> 5 > 4 == 1 
False 

O ile wiem, to ma dwa możliwe rozwiązania.

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

Ani jeden zwraca False, tak jak jest pierwszy kod rozwiązane przez Python?

+0

Można to sprawdzić, ale +1 do przesłuchania (być może) wynik nieintuicyjne. – imallett

Odpowiedz

27

Ma to związek z łańcuchem operatora. W przeciwieństwie do C/C++ i większości innych języków, Python umożliwia ci porównywanie operatorów, tak jak w normalnej matematyce. Od documentation:

Porównania mogą być dowolnie łączone, np x < y <= z jest równoważne x < y and y <= z, z wyjątkiem tego y oceniana jest tylko raz (ale w obu przypadkach z nie jest w ogóle kiedy x < y okazuje się być oceniana false).

Tak, to wyrażenie:

5 > 4 == 1 

jest właściwie interpretować jako:

5 > 4 and 4 == 1 # Except that 4 is only evaluated once. 

który przyjmuje postać:

True and False 

która False.


Korzystanie z nawiasów zmienia jednak sposób, w jaki Python interpretuje porównanie. To:

(5 > 4) == 1 

staje:

True == 1 

który jest True (patrz poniżej dla dlaczego). To samo dotyczy:

5 > (4 == 1) 

który przyjmuje postać:

5 > False 

który jest również True.


powodu PEP 0285, bool powstał podklasę int i True == 1 podczas False == 0:

>>> issubclass(bool, int) 
True 
>>> True == 1 
True 
>>> False == 0 
True 
>>> 
+0

Oto link do dokumentacji, tylko w celach informacyjnych: https://docs.python.org/2/reference/expressions.html#boolean-operations –

+2

@ iCodez interpretacja z łańcuchem wynosi 5> 4 i 4 == 1 – ryanpattison

+0

Ciekawy!Wielkie dzięki. – cdonts