Поряд з іншими відповідями, в яких згадувалося, пріоритет not
нижче in
, насправді ваше твердження еквівалентно:
not (True in [False, True])
Але зауважте, що якщо ви не відокремили свою умову від інших, python буде використовувати 2 ролі ( precedence
або chaining
) для того, щоб розділити це, і в цьому випадку python використовував пріоритет. Також зауважте, що якщо ви хочете відокремити умову, вам потрібно поставити всю умову в дужки не лише об'єкт чи значення:
(not True) in [False, True]
Але, як згадувалося, є ще одна модифікація python на операторах, яка є ланцюговою :
На основі документації python :
Зауважте, що порівняння, тести на приналежність та тести на особистість мають однаковий пріоритет і мають функцію ланцюга зліва направо, як описано в розділі Порівняння.
Наприклад, результат наступного твердження False
:
>>> True == False in [False, True]
False
Тому що python буде ланцюжок тверджень, таких як:
(True == False) and (False in [False, True])
Що саме є False and True
таке False
.
Можна припустити, що центральний об’єкт буде розділений між двома операціями та іншими об'єктами (в цьому випадку помилковим).
І зауважте, що це справедливо і для всіх порівнянь, включаючи тести членства та операції тестування ідентичності, які є наступними операндами:
in, not in, is, is not, <, <=, >, >=, !=, ==
Приклад:
>>> 1 in [1,2] == True
False
Ще один відомий приклад - діапазон чисел:
7<x<20
що дорівнює:
7<x and x<20