es un operador básico para Python (y muchos otros lenguajes también), debe comenzar con Google, si nunca lee ninguna referencia de Python.
technomage
3
@AndiDog Si bien es cierto que ambas preguntas son sobre el operador (+ =), la que vinculó se trata de un uso sofisticado y un problema sutil, y el OP aquí probablemente no pueda seguir el razonamiento allí (todavía).
Dr. belisarius
3
@AndiDog Quizás tenías razón en ese momento, pero mirando las soluciones (casi) aceptadas aquí, está claro que esta pregunta se trata de una comprensión básica del operador: D
En Python, + = es una capa de azúcar para el __iadd__método especial, __add__o __radd__si __iadd__no está presente. El __iadd__método de una clase puede hacer lo que quiera. El objeto de lista lo implementa y lo usa para iterar sobre un objeto iterable agregando 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 __iadd__método especial. Inicializa el objeto con un int, luego puede usar el operador + = para agregar un número. Agregué una declaración impresa __iadd__para mostrar que se llama. Además, __iadd__se espera que devuelva un objeto, por lo que devolví la suma de sí mismo más el otro número que tiene sentido en este caso.
>>>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
Si bien esto no es lo que estaba buscando el Asker, +1 para la respuesta real. =)
Michael
@Michael, ahí es donde el humor se suma al hecho ... :-D
Aaron John Sabu
3
+1 para responder a la pregunta, pero -1 para una __iadd__que devuelve un tipo diferente (que a su vez se puede agregar)
Caleth
Esta respuesta es demasiado compleja para el tipo de persona que necesitaría preguntar qué significa + = (es decir, un principiante). Su respuesta no es una respuesta para principiantes, no solo porque los principiantes generalmente no comienzan a aprender Python de una manera orientada a objetos, sino también porque hay respuestas mucho más simples (como las de @ Imran a continuación). Solo mis dos centavos, aunque agradezco esta respuesta.
q-compute
129
+= 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.
"sí mismo" es en realidad una muy mala descripción aquí, ya que los números enteros son inmutables.
AndiDog
41
x += 5no es exactamente lo mismo que decir x = x + 5en Python.
Nota aquí:
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]
+=agrega un número a una variable, cambiando la variable en sí en el proceso (mientras +que no lo haría). De manera similar a esto, existen los siguientes que también modifican la variable:
-=, resta un valor de la variable, estableciendo la variable en el 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 establece en el resultado de la misma
Puede haber otros. No soy un programador de Python.
Para los números, esta respuesta es correcta. (Véase la respuesta de Bryan para un comportamiento especial.) No son de hecho varios otros, incluyendo operadores de bits ( &=, >>=, etc.) y los operadores matemáticos adicionales ( **=, etc.).
Michael
16
Agrega el operando derecho al izquierdo. x += 2mediox = x + 2
También puede agregar elementos a una lista: vea este hilo SO .
Teóricamente a + = b "suma" b a almacenando el 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.
¿Qué queremos decir exactamente con "agregar"?
¿Qué queremos decir exactamente con "almacenar el resultado en un"? Las variables de Python no almacenan valores directamente, almacenan referencias a objetos.
En Python, las respuestas a ambas preguntas dependen del tipo de datos de a.
Entonces, ¿qué significa exactamente "agregar"?
Para números, significa suma 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 un"?
Si el objeto es mutable, se recomienda (pero no es obligatorio) realizar la modificación en el lugar. Entonces, a 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 de "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 __ADD__se intenta y finalmente __RADD__.
Se requiere cuidado al usar + = en Python en variables en las que 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, por lo tanto, b no se ve afectado. 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".
Por último, 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].
¿Qué aporta esta respuesta que aún no se haya discutido? Es una respuesta duplicada ...
jdv, solo intento ayudar. Soy un colaborador nuevo, lo siento si cree que mi respuesta fue un duplicado.
Está claro que es un duplicado si observa la mayoría de las otras respuestas. Está bien contribuir, pero debe esforzarse por contribuir con algo nuevo (por ejemplo, como la respuesta add vs iadd) o si quiere intentar una solución más clara. Pero, por lo que puedo decir, las respuestas más votadas son lo más claras posible para una respuesta básica.
4
Nota x += yno es lo mismo que x = x + yen algunas situaciones en las que se incluye un operador adicional debido a la precedencia del operador combinada con el hecho de que el lado derecho siempre se evalúa primero, p. Ej.
>>> x =2>>> x +=2and1>>> x
3>>> x =2>>> x = x +2and1>>> x
1
Tenga en cuenta que el primer caso se expande a:
>>> x =2>>> x = x +(2and1)>>> x
3
Es más probable que encuentre esto en el 'mundo real' con otros operadores, p. Ej.
Recuerde cuando solía sumar, por ejemplo, 2 y 3, en su calculadora anterior y cada vez que presiona el =botón, ve 3 agregado al total, +=hace un trabajo similar. Ejemplo:
x += yes equivalente a x = operator.iadd(x, y). Otra forma de decirlo es decir que z = operator.iadd(x, y)es equivalente al enunciado compuesto z = x; z += y.
object.__iadd__
Respuestas:
En Python, + = es una capa de azúcar para el
__iadd__
método especial,__add__
o__radd__
si__iadd__
no está presente. El__iadd__
método de una clase puede hacer lo que quiera. El objeto de lista lo implementa y lo usa para iterar sobre un objeto iterable agregando 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
__iadd__
método especial. Inicializa el objeto con un int, luego puede usar el operador + = para agregar un número. Agregué una declaración impresa__iadd__
para mostrar que se llama. Además,__iadd__
se espera que devuelva un objeto, por lo que devolví la suma de sí mismo más el otro número que tiene sentido en este caso.Espero que esto ayude.
fuente
__iadd__
que devuelve un tipo diferente (que a su vez se puede agregar)+=
agrega otro valor con el valor de la variable y asigna el nuevo valor a la variable.-=
,*=
,/=
Hace similar para la resta, multiplicación y división.fuente
x += 5
no es exactamente lo mismo que decirx = x + 5
en Python.Nota aquí:
Consulte como referencia: ¿Por qué + = se comporta de forma inesperada en las listas?
fuente
x += 7,8,9
+=
agrega un número a una variable, cambiando la variable en sí en el proceso (mientras+
que no lo haría). De manera similar a esto, existen los siguientes que también modifican la variable:-=
, resta un valor de la variable, estableciendo la variable en el 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 establece en el resultado de la mismaPuede haber otros. No soy un programador de Python.
fuente
&=
,>>=
, etc.) y los operadores matemáticos adicionales (**=
, etc.).Agrega el operando derecho al izquierdo.
x += 2
mediox = x + 2
También puede agregar elementos a una lista: vea este hilo SO .
fuente
No es un simple atajo sintáctico. Prueba esto:
versus
Esto ilustra que + = invoca el método de lista iadd pero + invoca add , que hace cosas diferentes con listas.
fuente
Teóricamente a + = b "suma" b a almacenando el 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.
En Python, las respuestas a ambas preguntas dependen del tipo de datos de a.
Entonces, ¿qué significa exactamente "agregar"?
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 un"?
Si el objeto es mutable, se recomienda (pero no es obligatorio) realizar la modificación en el lugar. Entonces, a 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 de "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__ADD__
se intenta y finalmente__RADD__
.Se requiere cuidado al usar + = en Python en variables en las que 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.
Cuando invocamos dostuff con una tupla, la tupla se copia como parte de la operación + = y, por lo tanto, b no se ve afectado. 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".
Por último, 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:
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].
fuente
La respuesta corta se
+=
puede traducir como "agregue lo que esté a la derecha del + = a la variable a la izquierda del + =".Ex. Si lo ha hecho,
a = 10
entoncesa += 5
sería:a = a + 5
Entonces, "a" ahora es igual a 15.
fuente
Nota
x += y
no es lo mismo quex = x + y
en algunas situaciones en las que se incluye un operador adicional debido a la precedencia del operador combinada con el hecho de que el lado derecho siempre se evalúa primero, p. Ej.Tenga en cuenta que el primer caso se expande a:
Es más probable que encuentre esto en el 'mundo real' con otros operadores, p. Ej.
x *= 2 + 1
==x = x * (2 + 1)
! =x = x * 2 + 1
fuente
+=
es solo un atajo para escribirEntonces, en cambio, escribirías
Ambas formas son correctas, pero el ejemplo dos le ayuda a escribir un poco menos de código
fuente
Como también dijeron otros, el operador + = es un atajo. Un ejemplo:
También podría escribirse así:
Entonces, en lugar de escribir el primer ejemplo, puede simplemente escribir el segundo, que funcionaría bien.
fuente
Recuerde cuando solía sumar, por ejemplo, 2 y 3, en su calculadora anterior y cada vez que presiona el
=
botón, ve 3 agregado al total,+=
hace un trabajo similar. Ejemplo:fuente
Veo muchas respuestas que no aparecen usando + = con múltiples enteros.
Un ejemplo:
Esto sería similar a:
y no:
fuente
Según la documentación
Entonces
x += 3
es lo mismo quex = x + 3
.saldrá 5.
Note que también hay
fuente