В языках программирования и в математике вычисление выражений производится в определенном порядке. Порядок этот задается приоритетом операторов и скобками. Со школы мы знаем, что умножение имеет более высокий приоритет, чем сложение, поэтому в пределах одних скобок сначала будет выполнено умножение, а затем только сложение:
2 * 2 + 2 = 6
Рассмотрим таблицу приоритета операций в языке Python. Сверху таблицы самые приоритетные операции, снизу – операции с низким приоритетом.
Операция | Описание |
( ) | Скобки – высший приоритет – первые |
** | Экспонента (возведение в степень) |
+x, -x, ~x | Унарные плюс, минус и битовое отрицание |
*, /, //, % | Умножение, деления, взятие остатка |
+, - | Сложение и вычитание |
<<, >> | Битовые сдвиги |
& | Битовое И |
^ | Битовое исключающее ИЛИ (XOR) |
| | Битовое ИЛИ |
==, !=, >, >=, <, <=, | Сравнение, проверка идентичности, проверка вхождения |
not | Логическое НЕ |
and | Логическое И |
or | Логическое ИЛИ – низший приоритет – последние |
Как видно, скобки самые главные. Скобки решают все.
Если в одном выражении идут операторы одинакового приоритета, то вычисления выполняются слева направо.
Исключение составляет оператор **. Он право-ассоциативный. Т.е. в цепочке из двух ** сначала выполнится правый, а потом левый.
>>> 3 ** 4 ** 2 43046721 >>> 3 ** (4 ** 2) 43046721 >>> (3 ** 4) ** 2 6561
Обратите внимание на приоритеты not, and и or.
not a or b and c === (not a) or (b and c)
Правила хорошего тона: не составляйте очень сложных выражений и логических выражений; всегда разбивайте их на части. Даже если вы прекрасно знаете приоритеты операций, то программист, читающий ваш код после вас, может знать их плохо; поэтому НЕ пренебрегайте скобками.
В случае с операторами сравнения, помните про цепочки сравнений!
x < y < z это ни (x < y) < z, ни x < (y < z), а x < y and y < z
Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈