Глава 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 += n | x = x + n |
x -= n | x = x - n |
x *= n | x = x * n |
x /= n | x = x / n |
x //= n | x = x // n |
x %= n | x = x % n |
x **= n | x = x ** n |
Что выполняется первым?
Мы уже видели кусочки этой картины по отдельности — теперь соберём полную карту приоритета операторов главы 5, от высшего к низшему:
()
скобки — всегда первыми
**
возведение в степень
+x -x
унарный плюс/минус
* / // %
умножение, деление, целочисленное деление, остаток
+ -
сложение, вычитание
poryadok.py
print(2 + 3 * 4) # 14 — сначала 3 * 4 = 12, потом + 2
print((2 + 3) * 4) # 20 — скобки меняют порядок
Дерево показывает то же самое, что и приоритет: * вложено
глубже, поэтому вычисляется первым — его результат становится одним из операндов
+.
Сомневаетесь — используйте скобки
Даже когда порядок формально понятен, скобки делают код честнее для человека, который будет его читать (в том числе для вас через полгода).
(a + b) * c читается быстрее, чем приходится вспоминать правила приоритета.Практика: присваивание и порядок вычислений
Тот же ноутбук, что и в разделе «Степени и корни» — он охватывает и эту тему