2011-01-30 19 views
42

Necesito saber qué + = hace en python. Es así de simple. También agradecería los enlaces a definiciones de otras herramientas de mano cortas en python.¿Qué hace exactamente + = do en python?

+4

['object .__ iadd__'] (http: // doc s.python.org/reference/datamodel.html#object.__iadd__) – ephemient

+2

es un operador básico para python (y muchos otros idiomas también), debe comenzar con google, si nunca lee ninguna referencia de python. – technomage

+1

@AndiDog Si bien es cierto que ambas preguntas son sobre el operador (+ =), la que usted ha vinculado es sobre un uso sofisticado y un problema sutil, y es probable que el OP aquí no pueda seguir el razonamiento allí (todavía). –

Respuesta

53

+= 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.

+9

"sí mismo" es en realidad una descripción muy mala aquí, ya que los enteros son inmutables. – AndiDog

13

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

También puede agregar elementos a una lista - ver this SO thread.

14

+= agrega un número a una variable, cambiando la variable en sí en el proceso (mientras que + no). Similar a esto, existen los siguientes que también modifica la variable:

  • -=, resta un valor de la variable, estableciendo la variable al resultado
  • *=, multiplica la variable y un valor, por lo que el resultado de la variable de
  • /=, divide la variable por el valor, por lo que el resultado de la variable
  • %=, lleva a cabo el módulo de la variable, con la variable luego ser ajustado en el resultado de que

Puede haber otros. No soy un programador de Python.

+0

Para los números, esta respuesta es correcta. (Ver [respuesta de Bryan] (https://stackoverflow.com/a/4845327/241211) para un comportamiento especial.) Hay [de hecho] (https://docs.python.org/3.1/library/operator.html# operator.iadd) varios otros, incluyendo operadores bit a bit ('& =', '>> =', etc.) y operadores matemáticos adicionales ('** =', etc.). – Michael

75

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 list lo implementa y lo usa para iterar sobre un objeto iterable que se agrega a cada elemento de la misma manera que lo hace el método extend de la lista.

Aquí hay una clase personalizada simple que implementa el método especial __iadd__. Inicializas el objeto con un int, luego puedes usar el operador + = para agregar un número. He agregado una declaración de impresión en __iadd__ para mostrar que se llama. Además, se espera que __iadd__ devuelva un objeto, por lo que devolví 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.

+7

Si bien esto no es lo que el Buscador estaba buscando, +1 para la respuesta real. =) – Michael

+0

@Michael, ahí es donde el humor se suma al hecho ... :-D –

-1

Como también se ha dicho, 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 

Así que en lugar de escribir el primer ejemplo, sólo puede escribir el segundo, que funcionaría bien.

8

No es un simple 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'] 

frente

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

Esto ilustra que + = invoca el método de la lista iadd pero invoca + añadir, que hacer cosas diferentes con las listas.

6

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

Nota 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: Why does += behave unexpectedly on lists?

-1

Recuerde que cuando se utiliza para resumir, por ejemplo 2 & 3, en su calculadora de edad y cada vez que se pulsa el = ves 3 agregado al total, el += hace un trabajo similar. Ejemplo:

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

es sólo un atajo para escribir

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

Así que en lugar que iba a escribir

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

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

Cuestiones relacionadas