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

Присваивание и порядок вычислений

Более короткая запись для изменения переменных — и полная карта того, что выполняется раньше, а что позже.

Операции присваивания

Изменить переменную «на основе самой себя» — очень частое действие: например, увеличить счёт в игре. Писать score = score + 10 можно, но Python предлагает более короткую запись:

prisvaivanie.py
score = 0
score += 10   # то же самое, что score = score + 10
print(score)  # 10

score -= 3    # score = score - 3
print(score)  # 7
Это создаёт НОВЫЙ объект, а не меняет старый
Как мы выяснили в главах 3 и 4, числа в Python неизменяемы. score += 10 не «дописывает» 10 к существующему объекту 0 — Python вычисляет score + 10, создаёт новый объект 10 и переподвязывает имя score к нему. Снаружи это выглядит как изменение, но внутри это ровно тот же механизм, что мы видели в главе 4 для age = age + 1.

Такие сокращения существуют для всех основных операторов:

Сокращённая записьПолная запись
x += nx = x + n
x -= nx = x - n
x *= nx = x * n
x /= nx = x / n
x //= nx = x // n
x %= nx = x % n
x **= nx = x ** n

Что выполняется первым?

Мы уже видели кусочки этой картины по отдельности — теперь соберём полную карту приоритета операторов главы 5, от высшего к низшему:

()
скобки — всегда первыми
**
возведение в степень
+x -x
унарный плюс/минус
* / // %
умножение, деление, целочисленное деление, остаток
+ -
сложение, вычитание
Полная карта приоритета операторов этой главы — от высшего к низшему
poryadok.py
print(2 + 3 * 4)     # 14 — сначала 3 * 4 = 12, потом + 2
print((2 + 3) * 4)   # 20 — скобки меняют порядок
+2*34
2 + 3 * 4 = 14 — умножение выполняется глубже в дереве, то есть раньше

Дерево показывает то же самое, что и приоритет: * вложено глубже, поэтому вычисляется первым — его результат становится одним из операндов +.

Сомневаетесь — используйте скобки
Даже когда порядок формально понятен, скобки делают код честнее для человека, который будет его читать (в том числе для вас через полгода). (a + b) * c читается быстрее, чем приходится вспоминать правила приоритета.
Практика: присваивание и порядок вычислений
Тот же ноутбук, что и в разделе «Степени и корни» — он охватывает и эту тему
Открыть практику →