Подтвердить что ты не робот

Что именно делает + = в python?

Мне нужно знать, что + = делает в python. Это так просто. Я также хотел бы получить ссылки на определения других коротких ручных инструментов в python.

4b9b3361

Ответ 1

В Python + = сахаровое покрытие для специального метода __iadd__ или __add__ или __radd__, если __iadd__ нет. Метод __iadd__ класса может делать все, что он хочет. Объект list реализует его и использует его для итерации по итерируемому объекту, добавляющему каждый элемент к себе таким же образом, как и метод расширения списка.

Вот простой пользовательский класс, который реализует специальный метод __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

Надеюсь, что это поможет.

Ответ 2

+= добавляет другое значение с переменным значением и назначает новое значение переменной.

>>> x = 3
>>> x += 2
>>> print x
5

-=, *=, /= аналогично для вычитания, умножения и деления.

Ответ 3

+= добавляет число к переменной, изменяя сама переменная в процессе (тогда как + не будет). Аналогично этому существуют следующие изменения, которые также изменяют переменную:

  • -=, вычитает значение из переменной, устанавливая переменную в результат
  • *=, умножает переменную и значение, делая результат переменной
  • /=, делит переменную на значение, делая результат переменной
  • %=, выполняет модуль по переменной, при этом переменная затем устанавливается на результат

Могут быть и другие. Я не программист на Python.

Ответ 4

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]

Смотрите для справки: Почему + = ведет себя неожиданно в списках?

Ответ 5

Он добавляет правый операнд влево. x += 2 означает x = x + 2

Он также может добавлять элементы в список - см. этот поток SO.

Ответ 6

Это не просто синтаксический ярлык. Попробуйте следующее:

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, но + вызывает add, которые делают разные вещи со списками.

Ответ 7

Условно a + = b "добавляет" b к сохранению результата в a. Это упрощенное описание будет описывать оператор + = во многих языках.

Однако упрощенное описание вызывает пару вопросов.

  1. Что именно мы подразумеваем под "добавлением"?
  2. Что именно мы подразумеваем под "сохранением результата в"? Переменные python не хранят значения напрямую, они хранят ссылки на объекты.

В python ответы на оба эти вопроса зависят от типа данных 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].

Ответ 8

+= 

является просто ярлыком для записи

numbers = 1
numbers = numbers + 1
print (numbers)   ## 2

Итак, вместо этого вы напишете

numbers = 1
numbers += 1
print (numbers)   ## 2

Оба способа верны, но пример два помогает вам написать немного меньше кода

Ответ 9

Краткий ответ += можно перевести как "добавьте все, что находится справа от + =, к переменной слева от + =".

Ex. Если у вас есть a = 10 то a += 5 будет: a = a + 5

Итак, "а" теперь равно 15.

Ответ 10

Как и другие, оператор + = является ярлыком. Пример:

var = 1;
var = var + 1;
#var = 2

Он также может быть записан так:

var = 1;
var += 1;
#var = 2

Итак, вместо того, чтобы писать первый пример, вы можете просто написать второй, который будет работать нормально.

Ответ 11

Помните, когда вы использовали, например, 2 и 3, в своем старом калькуляторе, и каждый раз, когда вы нажимаете =, вы видите, что добавлено 3 к итогу, += выполняет аналогичное задание. Пример:

>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8