Сообщить об ошибке.

Сокращенные операции присваивания значений

Операция составного присваивания, другое название "присваивание на месте" отличается от простоrо присваивания тем, что вместо знака равенства = в ней используется составной оператор, представляющий собой комбинацию бинарного оператора и оператора =.

Операции составного присваивания:

  • x += y, работает аналогично x = x + y
  • x -= y, работает аналогично x = x - y
  • x *= y, работает аналогично x = x * y
  • x /= y, работает аналогично x = x / y
  • x %= y, работает аналогично x = x % y
  • x **= y, работает аналогично x = x ** y
  • x //= y, работает аналогично x = x // y
  • x @= y, работает аналогично x = x @ y

В левой части составного присваивания допускается только одна целевая ссылка (переменная), множественные целевые ссылки (переменные) не поддерживаются.

При выполнении составного присваивания сначала вычисляется выражение справа. Затем Python вызывает специальный метод объекта _iadd_ для выполнения соответствующей бинарной операции на месте, передавая ему правую часть в качестве аргумента. Если такой метод не предусмотрен, то выполняется простое присваивание

Например, инструкция x += у выполняется как инструкция x = x._iadd_(у), если для x предусмотрен специальный метод _iadd_. Если же такой метод не предусмотрен, то инструкция x += у выполняется как инструкция x = x + y.

Операция составного присваивания никогда не создает свою целевую ссылку. К моменту ее выполнения целевая ссылка должна существовать. Составное присваивание может повторно связать целевую ссылку с другим объектом или изменить тот объект, с которым она уже была связана. Простое присваивание может создавать целевую ссылку или повторно связывать ее, но никогда не изменяет объект, с которым она до этого была связана, если таковой имеется. В данном случае различие между объектами и ссылками на объекты играет ключевую роль. Например, операция x = x + y не изменяет объект, с которым первоначально было связано имя x. Вместо этого она изменяет связывание имени x таким образом, чтобы оно ссылалось на новый объект.

Примеры использования:

>>> x = 3
>>> print(x)
# 3
>>> x += 2
>>> print(x)
# 5
>>> x -= 1
>>> print(x)
# 4
>>> x *= 2
>>> print(x)
# 8
>>> x /= 3
>>> print(x)
# 2.6666666666666665
>>> x %= 2
>>> print(x)
# 0.6666666666666665
>>> x **= 3
>>> print(x)
# 0.2962962962962961
>>> x //= 3
>>> print(x)
# 0.0
>>> x = 4
>>> x //= 2.1
>>> print(x)
# 1.0
>>> x = 4
>>> x //= 1.9
>>> print(x)
# 2.0
>>>