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
>>>
Man könnte diese aussehen, aber +1 für die Befragung eine (vielleicht) nicht eingängig Ergebnis. – imallett