Оператор присваивания и сокращённые формы (+=, -=)

Оператор присваивания и сокращённые формы (+=, -=)

Из модуля 1 вы знаете, что = присваивает значение переменной. Но в программировании часто встречается одна и та же операция: «взять текущее значение переменной, применить к нему что-то, записать обратно». Для таких случаев Python предлагает сокращённые операторы присваивания — компактный и читаемый синтаксис.

Проблема: повторяющийся код

Представьте счётчик очков в игре. Каждый раз, когда игрок набирает очки, нужно прибавить их к счёту:

score = 0
score = score + 10   # игрок набрал 10 очков
score = score + 25   # ещё 25 очков
score = score + 5    # ещё 5 очков
print(score)         # 40

Запись score = score + 10 работает, но выглядит громоздко: имя переменной повторяется дважды. Python предлагает сокращение — +=.

Оператор +=

x += y — это краткая запись x = x + y. Значение y прибавляется к x и результат записывается обратно в x:

score = 0
score += 10   # score = score + 10 → 10
score += 25   # score = score + 25 → 35
score += 5    # score = score + 5  → 40
print(score)  # 40

Намного чище, правда?

Все сокращённые операторы присваивания

Python поддерживает сокращённые формы для всех арифметических операторов:

ОператорЭквивалентПример (x=10)Результат
x += yx = x + yx += 313
x -= yx = x - yx -= 37
x *= yx = x * yx *= 330
x /= yx = x / yx /= 42.5
x //= yx = x // yx //= 33
x %= yx = x % yx %= 31
x **= yx = x ** yx **= 2100
n = 10

n += 5    # 15
print(n)

n -= 3    # 12
print(n)

n *= 2    # 24
print(n)

n //= 5   # 4
print(n)

n **= 3   # 64
print(n)

Сокращённые операторы и строки

Оператор += работает и со строками — он конкатенирует (склеивает):

message = "Привет"
message += ", мир"
message += "!"
print(message)   # Привет, мир!

И оператор *= работает со строками — повторяет строку:

line = "-"
line *= 20
print(line)   # --------------------

Важно: += создаёт новый объект для неизменяемых типов

Технически для чисел и строк (которые являются неизменяемыми типами) x += y создаёт новый объект и присваивает его переменной, а не изменяет существующий. Проверить это можно через id():

x = 10
print(id(x))   # например, 140234567890

x += 1
print(id(x))   # другое число — это другой объект!

Для понимания на начальном этапе это не критично. Просто знайте, что += для чисел и строк — это синтаксический сахар, а не «мутация в месте».

Оператор := (walrus operator)

Python 3.8 добавил новый оператор присваивания — := (называется «walrus operator», потому что похож на глаза и клыки моржа: 눈:=). Он позволяет присваивать значение и использовать его в одном выражении:

# Без walrus:
n = len("Hello")
if n > 3:
    print(f"Длинное слово: {n} символов")

# С walrus:
if (n := len("Hello")) > 3:
    print(f"Длинное слово: {n} символов")

Walrus особенно удобен в циклах while, когда нужно читать данные до получения специального значения:

# Читаем строки, пока пользователь не введёт "стоп"
line = input("Введите строку (или 'стоп'): ")
while line != "стоп":
    print(f"Вы написали: {line}")
    line = input("Ещё строку: ")

# С walrus — компактнее:
while (line := input("Введите строку: ")) != "стоп":
    print(f"Вы написали: {line}")

Используйте := умеренно — только когда это действительно упрощает код.

Практический пример: накопитель

Сокращённые операторы идеально подходят для накопления значений:

total = 0
count = 0

# Допустим, обрабатываем список покупок (к спискам вернёмся в модуле 5)
price1, price2, price3 = 100, 250, 75

total += price1   # 100
total += price2   # 350
total += price3   # 425

count += 1
count += 1
count += 1

average = total / count
print(f"Итого: {total} руб.")       # 425
print(f"Среднее: {average:.0f} руб.")  # 142 руб.

Ошибка: +=на несуществующей переменной

Важный момент: сокращённые операторы не создают переменную с нуля. Если переменная не существует — получите NameError:

# counter += 1  # NameError: name 'counter' is not defined
counter = 0
counter += 1   # теперь работает

Всегда инициализируйте переменную перед использованием +=.

Проверь себя

Какое значение будет в x после выполнения?

x = 2
x **= 3
x -= 4
x *= 2
  • x **= 32 ** 3 = 8
  • x -= 48 - 4 = 4
  • x *= 24 * 2 = 8

Итог: 8.

Итог

  • Сокращённые операторы (+=, -=, *=, /=, //=, %=, **=) компактно записывают изменение переменной на основе её текущего значения.
  • x += y полностью эквивалентно x = x + y — никакой магии, просто удобная запись.
  • += работает не только с числами, но и со строками (конкатенация) и другими типами.
  • Перед использованием += переменная должна быть инициализирована.
  • Оператор := (walrus) позволяет присваивать и использовать значение в одном выражении — удобен в циклах.

В следующем уроке подробно разберём операции со строками: конкатенацию, повторение и индексацию (срезы).

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике