2014-11-09 9 views
18

Ich versuche zu erraten, welcher Operator Priorität hat: > (größer als) oder == (gleich). Das ist mein Experiment:Priorität der Operatoren:> und ==

>>> 5 > 4 == 1 
False 

Soweit ich weiß, hat dies zwei mögliche Lösungen.

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

Keiner kehrt False, so wie der erste Code von Python gelöst?

+0

Man könnte diese aussehen, aber +1 für die Befragung eine (vielleicht) nicht eingängig Ergebnis. – imallett

Antwort

27

Dies hat mit der Verkettung des Bedieners zu tun. Im Gegensatz zu C/C++ und den meisten anderen Sprachen können Sie in Python Vergleichsoperatoren wie in der normalen Mathematik verketten. Von der documentation:

Vergleiche können beliebig verkettet werden, beispielsweise x < y <= z ist entspricht x < y and y <= z, außer dass y ausgewertet wird nur einmal (aber in beiden Fällen z wird überhaupt nicht bewertet, wenn x < y gefunden werden falsch).

Also, dieser Ausdruck:

5 > 4 == 1 

tatsächlich interpretiert als:

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

, die wird:

True and False 

die False ist.


Mit Klammer jedoch ändert, wie Python Ihren Vergleich interpretiert. Dies:

(5 > 4) == 1 

wird:

True == 1 

die True (siehe unten warum) ist. Das Gleiche gilt für:

5 > (4 == 1) 

, die wird:

5 > False 

die auch True ist.


Wegen PEP 0285, bool eine Unterklasse von int und True == 1 während False == 0 gemacht wurde:

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

Hier ist ein Link zu der Dokumentation, nur als Referenz: https://docs.python.org/2/reference/expressions.html#boolean-operatings –

+2

@ iCodez die Interpretation mit Verkettung ist 5> 4 und 4 == 1 – ryanpattison

+0

Interessant!Danke vielmals. – cdonts