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
>>>
Można to sprawdzić, ale +1 do przesłuchania (być może) wynik nieintuicyjne. – imallett