Наряду с другими ответами, в которых упоминается приоритет not
ниже in
, фактически ваше утверждение эквивалентно:
not (True in [False, True])
Но обратите внимание, что если вы не отделяете свое условие от других, python будет использовать 2 роли ( precedence
или chaining
), чтобы отделить это, и в этом случае python использовал приоритет. Также обратите внимание, что если вы хотите отделить условие, вам нужно поместить все условие в скобки, а не только объект или значение:
(not True) in [False, True]
Но, как уже упоминалось, есть еще одна модификация python для операторов, которая является цепочкой :
На основании документации по питону :
Обратите внимание, что сравнения, тесты на членство и тесты на идентичность имеют одинаковый приоритет и имеют функцию сцепления слева направо, как описано в разделе «Сравнения».
Например, результат следующего утверждения False
:
>>> True == False in [False, True]
False
Потому что python будет связывать операторы следующим образом:
(True == False) and (False in [False, True])
Что именно False and True
этоFalse
.
Вы можете предположить, что центральный объект будет разделен между двумя операциями и другими объектами (в данном случае False).
И обратите внимание, что это также верно для всех сравнений, включая тесты членства и тесты идентичности, которые являются следующими операндами:
in, not in, is, is not, <, <=, >, >=, !=, ==
Пример :
>>> 1 in [1,2] == True
False
Другой известный пример - диапазон номеров:
7<x<20
который равен:
7<x and x<20