это основной оператор для python (и многих других языков тоже), вам следует начать с google, если вы никогда не читали ссылки на python.
technomage
3
@AndiDog Хотя это правда, что оба вопроса касаются оператора (+ =), тот, который вы связали, касается сложного использования и тонкой проблемы, и OP здесь, вероятно, не может следовать рассуждениям там (пока).
Д-р Велизарий
3
@AndiDog Возможно, вы были правы в то время, но, глядя на (почти) принятые решения здесь, становится ясно, что этот вопрос касается базового понимания оператора: D
В Python + = - это сахарное покрытие для __iadd__специального метода, __add__или, __radd__если __iadd__его нет. __iadd__Метод класса может делать все , что хочет. Объект списка реализует его и использует его для итерации по итерируемому объекту, добавляя каждый элемент к самому себе так же, как это делает метод расширения списка.
Вот простой настраиваемый класс, реализующий __iadd__специальный метод. Вы инициализируете объект с помощью int, а затем можете использовать оператор + = для добавления числа. Я добавил оператор печати, __iadd__чтобы показать, что он вызывается. Кроме того, __iadd__ожидается возврат объекта, поэтому я вернул добавление самого себя плюс другое число, которое имеет смысл в данном случае.
>>>classAdder(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 +=3in __iadd__ 3>>> a
5
Хотя это не то, что искал спрашивающий, +1 за настоящий ответ. =)
Майкл
@Michael, вот где юмор добавляет факту ... :-D
Аарон Джон Сабу
3
+1 за ответ на вопрос, но -1 за то, __iadd__что возвращает другой тип (который сам по себе может быть добавлен)
Калет 01
Этот ответ слишком сложен для человека, которому нужно спросить, что означает + = (например, новичок). Ваш ответ не является ответом для новичков не только потому, что новички обычно не начинают изучать Python объектно-ориентированным способом, но также потому, что есть гораздо более простые ответы (например, @ Imran ниже). Всего лишь два цента, хотя я ценю этот ответ.
q-compute
129
+= добавляет другое значение к значению переменной и присваивает переменной новое значение.
>>> x =3>>> x +=2>>>print x
5
-=, *=, /=Делает аналогично для вычитания, умножения и деления.
"сам" здесь на самом деле очень плохое описание, поскольку целые числа неизменяемы.
AndiDog
41
x += 5это не совсем то же самое, что сказать x = x + 5в Python.
Обратите внимание:
In[1]: x =[2,3,4]In[2]: y = x
In[3]: x +=7,8,9In[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]
+=добавляет число к переменной, изменяя саму переменную в процессе (в отличие от +этого). Аналогично этому существует следующее, что также изменяет переменную:
-=, вычитает значение из переменной, устанавливая для переменной результат
*=, умножает переменную и значение, превращая результат в переменную
/=, делит переменную на значение, превращая результат в переменную
%=, выполняет модуль для переменной, при этом переменная устанавливается в ее результат
Для чисел это правильный ответ. (См . Ответ Брайана об особом поведении.) На самом деле существует несколько других, включая побитовые операторы ( &=, >>=и т. Д.) И дополнительные математические операторы ( **=и т. Д.).
Майкл
16
Он добавляет правый операнд к левому. x += 2средстваx = x + 2
Он также может добавлять элементы в список - см. Эту тему SO .
Условно a + = b «добавляет» b к сохранению результата в a. Это упрощенное описание описывает оператор + = на многих языках.
Однако упрощенное описание вызывает несколько вопросов.
Что именно мы подразумеваем под «добавлением»?
Что именно мы подразумеваем под «сохранением результата в a»? Переменные python не хранят значения напрямую, они хранят ссылки на объекты.
В 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])
Когда мы вызываем dostuff с кортежем, кортеж копируется как часть операции + =, поэтому b не затрагивается. Однако, когда мы вызываем его со списком, список изменяется на месте, поэтому затрагиваются как a, так и b.
В Python 3 аналогичное поведение наблюдается с типами «bytes» и «bytearray».
Наконец, обратите внимание, что переназначение происходит, даже если объект не заменен. Это не имеет большого значения, если левая часть - просто переменная, но это может вызвать сбивающее с толку поведение, когда у вас есть неизменяемая коллекция, ссылающаяся на изменяемые коллекции, например:
a =([1,2],[3,4])
a[0]+=[5]
В этом случае [5] будет успешно добавлен в список, на который указывает [0], но после этого будет вызвано исключение, когда код попытается переназначить [0], но не сможет.
Что дает этот ответ, что еще не обсуждалось? Это дублированный ответ ...
jdv, просто пытаюсь помочь. Я новый участник, извините, если вы считаете, что мой ответ повторяется.
Понятно, что это дубликат, если вы посмотрите на большинство других ответов. Вносить свой вклад - это нормально, но вы должны стремиться внести что-то новое (например, как ответ add vs iadd), или вы хотите попытаться найти более четкое решение. Но, насколько я могу судить, ответы, получившие наибольшее количество голосов, настолько ясны, насколько вы можете получить базовый ответ.
4
Примечание x += y- это не то же самое, что x = x + yв некоторых ситуациях, когда добавляется дополнительный оператор из-за приоритета оператора в сочетании с тем фактом, что правая часть всегда оценивается первой, например
>>> x =2>>> x +=2and1>>> x
3>>> x =2>>> x = x +2and1>>> x
1
Обратите внимание, что первый случай расширяется до:
>>> x =2>>> x = x +(2and1)>>> x
3
Вы с большей вероятностью столкнетесь с этим в «реальном мире» с другими операторами, например
Помните, когда вы привыкли суммировать, например, 2 и 3, в своем старом калькуляторе и каждый раз, когда вы нажимаете кнопку, =вы видите добавление 3 к общей сумме, и он +=выполняет аналогичную работу. Пример:
object.__iadd__
Ответы:
В Python + = - это сахарное покрытие для
__iadd__
специального метода,__add__
или,__radd__
если__iadd__
его нет.__iadd__
Метод класса может делать все , что хочет. Объект списка реализует его и использует его для итерации по итерируемому объекту, добавляя каждый элемент к самому себе так же, как это делает метод расширения списка.Вот простой настраиваемый класс, реализующий
__iadd__
специальный метод. Вы инициализируете объект с помощью int, а затем можете использовать оператор + = для добавления числа. Я добавил оператор печати,__iadd__
чтобы показать, что он вызывается. Кроме того,__iadd__
ожидается возврат объекта, поэтому я вернул добавление самого себя плюс другое число, которое имеет смысл в данном случае.Надеюсь это поможет.
источник
__iadd__
что возвращает другой тип (который сам по себе может быть добавлен)+=
добавляет другое значение к значению переменной и присваивает переменной новое значение.-=
,*=
,/=
Делает аналогично для вычитания, умножения и деления.источник
x += 5
это не совсем то же самое, что сказатьx = x + 5
в Python.Обратите внимание:
См. Для справки: Почему + = неожиданно ведет себя в списках?
источник
x += 7,8,9
+=
добавляет число к переменной, изменяя саму переменную в процессе (в отличие от+
этого). Аналогично этому существует следующее, что также изменяет переменную:-=
, вычитает значение из переменной, устанавливая для переменной результат*=
, умножает переменную и значение, превращая результат в переменную/=
, делит переменную на значение, превращая результат в переменную%=
, выполняет модуль для переменной, при этом переменная устанавливается в ее результатМогут быть и другие. Я не программист на Python.
источник
&=
,>>=
и т. Д.) И дополнительные математические операторы (**=
и т. Д.).Он добавляет правый операнд к левому.
x += 2
средстваx = x + 2
Он также может добавлять элементы в список - см. Эту тему SO .
источник
Это не просто синтаксический ярлык. Попробуй это:
против
Это показывает, что + = вызывает метод списка iadd, а + вызывает add , который делает разные вещи со списками.
источник
Условно a + = b «добавляет» b к сохранению результата в a. Это упрощенное описание описывает оператор + = на многих языках.
Однако упрощенное описание вызывает несколько вопросов.
В Python ответы на оба этих вопроса зависят от типа данных файла.
Так что же именно означает «добавление»?
Обратите внимание, что для списков + = более гибкий, чем +, оператор + в списке требует другого списка, но оператор + = принимает любую итерацию.
Так что же означает «хранить значение в a»?
Если объект является изменяемым, рекомендуется (но не обязательно) выполнить изменение на месте. Таким образом, a указывает на тот же объект, что и раньше, но теперь этот объект имеет другое содержимое.
Если объект неизменяемый, то, очевидно, он не может выполнить модификацию на месте. Некоторые изменяемые объекты могут также не иметь реализации операции добавления на месте. В этом случае переменная «а» будет обновлена, чтобы указывать на новый объект, содержащий результат операции сложения.
Технически это реализуется путем поиска
__IADD__
, если это не реализовано, затем__ADD__
выполняется попытка и наконец__RADD__
.Требуется осторожность при использовании + = в python для переменных, где мы не уверены в точном типе и, в частности, когда мы не уверены, является ли тип изменяемым или нет. Например, рассмотрим следующий код.
Когда мы вызываем dostuff с кортежем, кортеж копируется как часть операции + =, поэтому b не затрагивается. Однако, когда мы вызываем его со списком, список изменяется на месте, поэтому затрагиваются как a, так и b.
В Python 3 аналогичное поведение наблюдается с типами «bytes» и «bytearray».
Наконец, обратите внимание, что переназначение происходит, даже если объект не заменен. Это не имеет большого значения, если левая часть - просто переменная, но это может вызвать сбивающее с толку поведение, когда у вас есть неизменяемая коллекция, ссылающаяся на изменяемые коллекции, например:
В этом случае [5] будет успешно добавлен в список, на который указывает [0], но после этого будет вызвано исключение, когда код попытается переназначить [0], но не сможет.
источник
Краткий ответ
+=
можно перевести как «добавить то, что находится справа от + =, к переменной слева от + =».Ex. Если бы у вас было,
a = 10
тоa += 5
было бы:a = a + 5
Итак, «а» теперь равно 15.
источник
Примечание
x += y
- это не то же самое, чтоx = x + y
в некоторых ситуациях, когда добавляется дополнительный оператор из-за приоритета оператора в сочетании с тем фактом, что правая часть всегда оценивается первой, напримерОбратите внимание, что первый случай расширяется до:
Вы с большей вероятностью столкнетесь с этим в «реальном мире» с другими операторами, например
x *= 2 + 1
==x = x * (2 + 1)
! =x = x * 2 + 1
источник
+=
это просто ярлык для написанияВместо этого вы бы написали
Оба способа верны, но второй пример поможет вам написать немного меньше кода.
источник
Как также говорили другие, оператор + = - это ярлык. Пример:
Это также можно было бы написать так:
Поэтому вместо того, чтобы писать первый пример, вы можете просто написать второй, который будет работать нормально.
источник
Помните, когда вы привыкли суммировать, например, 2 и 3, в своем старом калькуляторе и каждый раз, когда вы нажимаете кнопку,
=
вы видите добавление 3 к общей сумме, и он+=
выполняет аналогичную работу. Пример:источник
Я вижу много ответов, которые не возникают при использовании + = с несколькими целыми числами.
Один пример:
Это будет похоже на:
и нет:
источник
Согласно документации
Так
x += 3
же, какx = x + 3
.выведет 5.
Обратите внимание, что есть также
источник