while loop infinito hacer for ejemplo dentro condiciones con como ciclo bucle python operators notation shorthand compound-assignment

loop - if dentro de un for python



¿Qué hace exactamente+= do en Python? (10)

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

También puede agregar elementos a una lista; consulte este hilo SO .

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.


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, que funcionaría bien.


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


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 con "agregar"?
  2. ¿Qué queremos decir con "almacenar el resultado en un"? las variables python no almacenan valores directamente 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 los 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 a"?

Si el objeto es mutable, entonces se recomienda (pero no se requiere) realizar la modificación in situ. 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 in situ. Algunos objetos mutables tampoco pueden 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 contenga el resultado de una operación de suma.

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

Se requiere cuidado cuando se usa + = en Python en variables donde no estamos seguros del tipo exacto y en particular cuando no estamos seguros 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 tienes una colección inmutable que hace referencia a colecciones mutables, por ejemplo:

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

En este caso, [5] se agregará correctamente 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].


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

versus

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 agregar , que hace cosas diferentes con las listas.


Recuerda cuando solías sumar, por ejemplo 2 y 3, en tu calculadora anterior y cada vez que tocas el = ves 3 agregados al total, el += hace un trabajo similar. Ejemplo:

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


+= 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 resta, multiplicación y división.


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

  • -= , resta un valor de variable, estableciendo la variable para 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 luego la variable se establece en el resultado

Puede haber otros. No soy un programador de Python.


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 para referencia: ¿Por qué + = se comporta inesperadamente en las listas?


+=

es solo un atajo para escribir

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

Entonces, en cambio, escribirías

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

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