Мені потрібно знати, що + = робить у python. Це так просто. Я також вдячний за посилання на визначення інших інструментів короткого ручного використання в python.
Мені потрібно знати, що + = робить у python. Це так просто. Я також вдячний за посилання на визначення інших інструментів короткого ручного використання в python.
Відповіді:
У Python + = - цукрове покриття для __iadd__
спеціального методу, __add__
або, __radd__
якщо __iadd__
його немає. __iadd__
Метод класу може робити все , що хоче. Об'єкт списку реалізує його і використовує його для повторення ітерабельного об'єкта, додаючи кожен елемент до себе так само, як це робить метод розширення списку.
Ось простий спеціальний клас, який реалізує __iadd__
спеціальний метод. Ви ініціалізуєте об'єкт з int, потім можете використовувати оператор + =, щоб додати число. Я додав заяву про друк, __iadd__
щоб показати, що вона викликається. Також __iadd__
очікується повернення об'єкта, тому я повернув додавання себе плюс інше число, що має сенс у цьому випадку.
>>> class Adder(object):
def __init__(self, num=0):
self.num = num
def __iadd__(self, other):
print 'in __iadd__', other
self.num = self.num + other
return self.num
>>> a = Adder(2)
>>> a += 3
in __iadd__ 3
>>> a
5
Сподіваюся, це допомагає.
__iadd__
яке повертає інший тип (який можна додати)
x += 5
не зовсім те саме, що говорити x = x + 5
в Python.
Примітка тут:
In [1]: x = [2,3,4]
In [2]: y = x
In [3]: x += 7,8,9
In [4]: x
Out[4]: [2, 3, 4, 7, 8, 9]
In [5]: y
Out[5]: [2, 3, 4, 7, 8, 9]
In [6]: x += [44,55]
In [7]: x
Out[7]: [2, 3, 4, 7, 8, 9, 44, 55]
In [8]: y
Out[8]: [2, 3, 4, 7, 8, 9, 44, 55]
In [9]: x = x + [33,22]
In [10]: x
Out[10]: [2, 3, 4, 7, 8, 9, 44, 55, 33, 22]
In [11]: y
Out[11]: [2, 3, 4, 7, 8, 9, 44, 55]
Див. Для довідки: Чому + = поводиться несподівано у списках?
x += 7,8,9
+=
додає число до змінної, змінюючи саму змінну в процесі (тоді як +
ні). Подібно до цього, є наступне, що також змінює змінну:
-=
, віднімає значення зі змінної, встановлюючи змінну результату*=
, помножує змінну і значення, роблячи результат змінним/=
, ділить змінну на значення, роблячи результат змінною%=
, виконує модуль на змінній, при цьому змінна встановлюється на результат їїМожуть бути й інші. Я не програміст Python.
&=
, >>=
і т.д.) і додаткові математичні оператори ( **=
і т.д.).
Він додає правий операнд ліворуч. x += 2
засобиx = x + 2
Він також може додавати елементи до списку - дивіться цю тему SO .
Це не просто синтаксичний ярлик. Спробуйте це:
x=[] # empty list
x += "something" # iterates over the string and appends to list
print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']
проти
x=[] # empty list
x = x + "something" # TypeError: can only concatenate list (not "str") to list
Це ілюструє, що + = викликає метод списку iadd, але + викликає додати , що робить різні списки зі списками.
Умовно a + = b "додає" b до збереження результату в a. Цей спрощений опис описує + = оператор багатьма мовами.
Однак спрощений опис викликає пару питань.
У python відповіді на обидва ці питання залежать від типу даних a.
Отже, що саме означає "додавання"?
Зауважте, що для списків + = є більш гнучким, ніж +, оператору + у списку потрібен інший список, але оператор + = приймає будь-який ітерабельний список.
Отже, що означає "зберігання значення в"?
Якщо об'єкт є змінним, рекомендується (але не потрібно) здійснити модифікацію на місці. Отже, вказує на той самий об’єкт, який він робив раніше, але цей об’єкт зараз має різний зміст.
Якщо об'єкт є незмінним, він, очевидно, не може виконати модифікацію на місці. Деякі об'єкти, що змінюються, також можуть не реалізувати операцію "додавання" на місці. У цьому випадку змінна "a" буде оновлена, щоб вказати на новий об'єкт, що містить результат операції додавання.
Технічно це реалізується шляхом пошуку __IADD__
спочатку, якщо це не реалізовано, то __ADD__
спробується і нарешті __RADD__
.
Необхідно бути обережним при використанні + = у python для змінних, де ми не впевнені в точному типі, і, особливо, коли ми не впевнені, тип є змінним чи ні. Наприклад, розглянемо наступний код.
def dostuff(a):
b = a
a += (3,4)
print(repr(a)+' '+repr(b))
dostuff((1,2))
dostuff([1,2])
Коли ми викликаємо достуф з кортежем, то кортеж копіюється як частина операції + =, тому b не впливає. Однак, коли ми викликаємо його зі списком, список змінюється на місці, тому впливають і а, і b.
У python 3 подібна поведінка спостерігається з типами "байт" та "bytearray".
Нарешті зауважте, що перепризначення відбувається, навіть якщо об'єкт не замінений. Це не має великого значення, якщо ліва частина є просто змінною, але це може спричинити заплутану поведінку, коли у вас є незмінна колекція, що стосується, наприклад, змінних колекцій:
a = ([1,2],[3,4])
a[0] += [5]
У цьому випадку [5] буде успішно доданий до списку, на який посилається [0], але потім буде виняток виняток, коли код намагається і не присвоїть повторне призначення [0].
Коротку відповідь +=
можна перекласти як "додати все, що знаходиться праворуч від + =, до змінної зліва від + =".
Вих. Якщо у вас a = 10
тоді це a += 5
було б: a = a + 5
Отже, "а" зараз дорівнює 15.
Примітка x += y
не така, як x = x + y
у деяких ситуаціях, коли додатковий оператор включений через перевагу оператора у поєднанні з тим, що права рука завжди оцінюється спочатку, наприклад
>>> x = 2
>>> x += 2 and 1
>>> x
3
>>> x = 2
>>> x = x + 2 and 1
>>> x
1
Зверніть увагу, що перший випадок розгорніть на:
>>> x = 2
>>> x = x + (2 and 1)
>>> x
3
Ви з більшою ймовірністю стикаєтеся з цим у "реальному світі" з іншими операторами, наприклад
x *= 2 + 1
== x = x * (2 + 1)
! =x = x * 2 + 1
+=
це лише ярлик для написання
number = 4
number = number + 1
Тож замість цього ви б писали
numbers = 4
numbers += 1
Обидва способи правильні, але приклад два допомагає написати трохи менше коду
Як також говорили інші, оператор + = - це ярлик. Приклад:
var = 1;
var = var + 1;
#var = 2
Це також можна записати так:
var = 1;
var += 1;
#var = 2
Тож замість того, щоб писати перший приклад, ви можете просто написати другий, який би спрацював чудово.
Згадайте, коли ви колись підсумовували, наприклад, 2 і 3, у своєму старому калькуляторі, і кожен раз, коли ви натискаєте на те, що =
ви бачите 3, додане до загальної суми, +=
виконує аналогічну роботу. Приклад:
>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8
Я бачу чимало відповідей, які не можуть використовувати + = з кількома цілими числами.
Один приклад:
x -= 1 + 3
Це буде схоже на:
x = x - (1 + 3)
і ні:
x = (x - 1) + 3
Відповідно до документації
x += y
еквівалентноx = operator.iadd(x, y)
. Інший спосіб сказати це - сказати, щоz = operator.iadd(x, y)
еквівалент складному твердженнюz = x; z += y
.
Так x += 3
це те саме, що x = x + 3
.
x = 2
x += 3
print(x)
виведе 5.
Зауважте, що також є
object.__iadd__