Насколько я знаю, в C и С++ последовательность приоритетов для NOT AND и OR NOT > AND > OR. Но это похоже не работает аналогично в Python. Я попытался найти его в документации Python и не смог (думаю, я немного нетерпелив.). Может кто-нибудь прояснить это для меня?
Приоритет логических операторов NOT AND & OR в python
Ответ 1
НЕТ, И, ИЛИ, от наивысшего до самого низкого в соответствии с документацией https://docs.python.org/3/reference/expressions.html#operator-precedence
Вот полная таблица приоритетов, наименьший приоритет до наивысшего. Строка имеет тот же приоритет и цепи слева направо
- лямбда
- if - else
- или
- и
- not x
- in, а не in, is, is not, <, < =, > , > =,! =, ==
- |
- ^
- &
- <, →
- +, -
- *,/,//,%
- + x, -x, ~ x
- **
- x [index], x [индекс: индекс], x (аргументы...), x.attribute
- (выражения...), [выражения...], {ключ: значение...}, {выражения...}
EDIT: если неправильный приоритет
Ответ 2
not
связывается более жестко, чем and
, который связывается более жестко, чем or
, как указано в ссылке на язык
Ответ 3
Из булевых операторов приоритет от самого слабого до сильного выглядит следующим образом:
-
or
-
and
-
not x
-
is not
;not in
Если операторы имеют равную оценку приоритетов, они идут слева направо.
Ответ 4
Нет никаких оснований для того, чтобы Python имел другую последовательность приоритетов этих операторов, чем хорошо установленную в (почти) всех других языках программирования, включая C/С++.
Вы можете найти его в справочнике по языку Python, часть 6.16 - приоритет оператора, загружаемый (для текущей версии и упакованный со всей другой стандартной документацией) из https://docs.python.org/3/download.html или читайте здесь: 6.16. Приоритет оператора.
Но в Python все еще есть что-то, что может ввести вас в заблуждение: результат операторов and
и or
может отличаться от True
или False
- см. 6.11 Логические операции в том же документе.
Ответ 5
Вы можете выполнить следующий тест, чтобы определить приоритет and
и or
.
Сначала попробуйте 0 and 0 or 1
в консоли python
Если or
связывается первым, тогда мы ожидаем 0
как вывод.
В моей консоли 1
- это вывод. Это означает, что and
связывает сначала или равно or
(возможно, выражения оцениваются слева направо).
Затем попробуйте 1 or 0 and 0
.
Если or
и and
связывать одинаково со встроенным правым порядком оценки слева направо, мы должны получить 0
как вывод.
В моей консоли 1
- это вывод. Тогда мы можем заключить, что and
имеет более высокий приоритет, чем or
.