Насколько я знаю, в 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.