Подтвердить что ты не робот

Приоритет операторов:> и ==

Я пытаюсь угадать, какой оператор имеет приоритет: > (больше) или == (равно). Это мой эксперимент:

>>> 5 > 4 == 1
False

Насколько я знаю, у этого есть два возможных решения.

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

Никто не возвращает False, так как первый код разрешен Python?

4b9b3361

Ответ 1

Это связано с цепочкой операторов. В отличие от C/С++ и большинства других языков, Python позволяет вам связывать операторы сравнения так же, как и в обычной математике. Из документа :

Сравнение может быть закодировано произвольно, например, x < y <= zэквивалентно x < y and y <= z, за исключением того, что y оценивается только один раз (но в обоих случаях z вообще не оценивается, когда x < y оказывается ложь).

Итак, это выражение:

5 > 4 == 1

фактически интерпретируется как:

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

который становится:

True and False

который равен False.


Использование скобок, однако, изменяет то, как Python интерпретирует ваше сравнение. Это:

(5 > 4) == 1

становится:

True == 1

который равен True (см. ниже, почему). То же самое для:

5 > (4 == 1)

который становится:

5 > False

который также является True.


Из-за PEP 0285, bool был сделан подкласс int и True == 1, а False == 0:

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