Глава 5 · Давайте поиграем с числами!

Ассоциативность операторов

Приоритет говорит, какой оператор раньше. Ассоциативность говорит, в каком порядке считать несколько одинаковых по приоритету операторов подряд.

Приоритет отвечает на вопрос «какой оператор раньше», а ассоциативность — на вопрос «в каком порядке считать несколько операторов ОДНОГО приоритета подряд».

Большинство операторов — слева направо

8 - 4 - 2 считается как (8 - 4) - 2, то есть слева направо. Это называется левой ассоциативностью, и так ведут себя почти все операторы Python: + - * / // %.

--842
8 - 4 - 2 — левоассоциативно: сначала левая пара (8 - 4), потом результат минус 2
levaya.py
print(8 - 4 - 2)     # 2, потому что это (8 - 4) - 2 = 4 - 2
print((8 - 4) - 2)   # 2 — то же самое явно
print(8 - (4 - 2))   # 6 — а вот это другое число!

Исключение: ** — справа налево

Возведение в степень — единственный оператор в этой главе с правой ассоциативностью. Сравним, что дал бы каждый вариант для 2 ** 3 ** 2:

****232
Если бы ** было левоассоциативным: (2 ** 3) ** 2 = 64 — но это НЕ то, что делает Python
**2**32
На самом деле ** правоассоциативно: 2 ** (3 ** 2) = 512
stepen_associativnost.py
print(2 ** 3 ** 2)     # 512 — Python считает как 2 ** (3 ** 2)
print((2 ** 3) ** 2)   # 64  — левоассоциативный вариант дал бы другое число
print(2 ** (3 ** 2))   # 512 — совпадает с реальным поведением Python
2 ** 3 ** 2
2 ** (3 ** 2)
2 ** 9
512
Правая ассоциативность: сначала считается ВЕРХНИЙ (правый) показатель степени
Зачем ** вообще так сделали
Правая ассоциативность степени совпадает с математической традицией «башни степеней» (tetration): в математике abc всегда читается как a(bc), а не наоборот. Python здесь просто следует давнему математическому соглашению.
Практика: ассоциативность операторов
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →