¿Qué es exactamente lo que hace + = en python?

Necesito saber lo que + = hace en python. Es así de simple. También agradecería enlaces a definiciones de otras herramientas de mano corta en python.

En Python, + = es recubrimiento de azúcar para el método especial __iadd__ , o __add__ o __radd__ si __iadd__ no está presente. El método __iadd__ de una clase puede hacer lo que quiera. El objeto de la lista lo implementa y lo utiliza para recorrer en iteración un objeto iterable que agrega cada elemento a sí mismo de la misma manera que lo hace el método de extensión de la lista.

Aquí hay una clase personalizada simple que implementa el método especial __iadd__ . Inicializa el objeto con un int, luego puede usar el operador + = para agregar un número. He añadido una statement de impresión en __iadd__ para mostrar que se llama. Además, se espera que __iadd__ devuelva un objeto, así que __iadd__ la adición de sí mismo más el otro número que tiene sentido en este caso.

 >>> 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 

Espero que esto ayude.

+= agrega otro valor con el valor de la variable y asigna el nuevo valor a la variable.

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

-= , *= , /= hace similar para la resta, multiplicación y división.

+= agrega un número a una variable, cambiando la variable en sí misma en el proceso (mientras que + no lo haría). Similar a esto, hay lo siguiente que también modifica la variable:

  • -= , resta un valor de la variable, estableciendo la variable al resultado
  • *= , multiplica la variable y un valor, haciendo que el resultado sea la variable
  • /= , divide la variable por el valor, haciendo que el resultado sea la variable
  • %= , realiza el módulo en la variable, y la variable se ajusta al resultado de la variable.

Puede haber otros. No soy un progtwigdor de Python.

x += 5 no es exactamente lo mismo que decir x = x + 5 en Python.

Tenga en cuenta aquí:

 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] 

Ver como referencia: ¿Por qué + = se comporta inesperadamente en las listas?

Agrega el operando derecho a la izquierda. x += 2 significa x = x + 2

También puede agregar elementos a una lista – vea este subproceso SO .

No es un mero atajo sintáctico. Prueba esto:

 x=[] # empty list x += "something" # iterates over the string and appends to list print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g'] 

versus

 x=[] # empty list x = x + "something" # TypeError: can only concatenate list (not "str") to list 

Esto ilustra que + = invoca el método de lista iadd pero + invoca add , que hacen cosas diferentes con listas.

En teoría, a + = b “agrega” b a un almacenamiento del resultado en a. Esta descripción simplista describiría el operador + = en muchos idiomas.

Sin embargo, la descripción simplista plantea un par de preguntas.

  1. ¿Qué queremos decir exactamente con “agregar”?
  2. ¿Qué queremos decir exactamente con “almacenar el resultado en una”? Las variables de Python no almacenan valores directamente, sino que almacenan referencias a objetos.

En Python, las respuestas a estas dos preguntas dependen del tipo de datos de a.


Entonces, ¿qué significa exactamente “agregar”?

  • Para números significa sum numérica.
  • Para listas, tuplas, cadenas, etc. significa concatenación.

Tenga en cuenta que para las listas + = es más flexible que +, el operador + en una lista requiere otra lista, pero el operador + = aceptará cualquier iterable.


Entonces, ¿qué significa “almacenar el valor en una”?

Si el objeto es mutable, se recomienda (pero no es obligatorio) que realice la modificación en el lugar. Entonces, apunta al mismo objeto que antes pero ese objeto ahora tiene un contenido diferente.

Si el objeto es inmutable, obviamente no puede realizar la modificación en el lugar. Algunos objetos mutables también pueden no tener una implementación de una operación “agregar” en el lugar. En este caso, la variable “a” se actualizará para apuntar a un nuevo objeto que contiene el resultado de una operación de adición.

Técnicamente, esto se implementa buscando __IADD__ primero, si eso no se implementa, entonces se prueba __RADD__ y finalmente __RADD__ .


Es necesario tener cuidado al usar + = en python en variables donde no estamos seguros del tipo exacto y, en particular, cuando no estamos seguros de si el tipo es mutable o no. Por ejemplo, considere el siguiente código.

 def dostuff(a): b = a a += (3,4) print(repr(a)+' '+repr(b)) dostuff((1,2)) dostuff([1,2]) 

Cuando invocamos dostuff con una tupla, la tupla se copia como parte de la operación + = y así b no se ve afectada. Sin embargo, cuando lo invocamos con una lista, la lista se modifica en su lugar, por lo que tanto a como b se ven afectados.

En Python 3, se observa un comportamiento similar con los tipos “bytes” y “bytearray”.


Finalmente, tenga en cuenta que la reasignación ocurre incluso si el objeto no se reemplaza. Esto no importa mucho si el lado izquierdo es simplemente una variable, pero puede causar un comportamiento confuso cuando tiene una colección inmutable que se refiere a colecciones mutables, por ejemplo:

 a = ([1,2],[3,4]) a[0] += [5] 

En este caso, [5] se agregará con éxito a la lista a la que hace referencia un [0], pero luego se generará una excepción cuando el código intente y no pueda reasignar un [0].

 += 

es solo un atajo para escribir

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

Así que en lugar de eso escribirías

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

Ambas formas son correctas, pero el ejemplo dos le ayuda a escribir un poco menos de código

Como otros también dijeron, el operador + = es un atajo. Un ejemplo:

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

También podría escribirse así:

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

Entonces, en lugar de escribir el primer ejemplo, puedes escribir el segundo, lo que funcionaría bien.

Recuerde que cuando solía sumr, por ejemplo 2 y 3, en su antigua calculadora y cada vez que golpea el = ve 3 sumdo al total, el += hace un trabajo similar. Ejemplo:

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

La respuesta corta es += se puede traducir como “añada lo que esté a la derecha de + = a la variable a la izquierda de + =”.

Ex. Si tienes a = 10 entonces a += 5 sería: a = a + 5

Entonces, “a” ahora es igual a 15.