Глава 5 · Давайте поиграем с числами!
Ассоциативность операторов
Приоритет говорит, какой оператор раньше. Ассоциативность говорит, в каком порядке считать несколько одинаковых по приоритету операторов подряд.
Приоритет отвечает на вопрос «какой оператор раньше», а ассоциативность — на вопрос «в каком порядке считать несколько операторов ОДНОГО приоритета подряд».
Большинство операторов — слева направо
8 - 4 - 2 считается как (8 - 4) - 2,
то есть слева направо. Это называется левой ассоциативностью, и так ведут себя
почти все операторы Python: + - * / // %.
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:
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, без установки