Saltar al contenido

¿En qué se diferencian las funciones de operador in situ de Python de las funciones de operador estándar?

Esta es el arreglo más correcta que te podemos aportar, sin embargo obsérvala detenidamente y valora si se puede adaptar a tu proyecto.

Solución:

En primer lugar, debe comprender la diferencia entre __add__ y __iadd__.

de un objeto __add__ El método es una suma regular: toma dos parámetros, devuelve su suma y no modifica ninguno de los parámetros.

de un objeto __iadd__ El método también toma dos parámetros, pero realiza el cambio en el lugar, modificando el contenido del primer parámetro. Debido a que esto requiere la mutación de objetos, los tipos inmutables (como los tipos de números estándar) no deberían tener un __iadd__ método.

a + b usos __add__. a += b usos __iadd__ si existiera; si no lo hace, lo emula a través de __add__como en tmp = a + b; a = tmp. operator.add y operator.iadd difieren de la misma manera.

A la otra pregunta: operator.iadd(x, y) no es equivalente a z = x; z += yporque si no __iadd__ existe __add__ se utilizará en su lugar. Debe asignar el valor para asegurarse de que el resultado se almacene en ambos casos: x = operator.iadd(x, y).

Puedes ver esto tú mismo con bastante facilidad:

import operator
a = 1
operator.iadd(a, 2)
# a is still 1, because ints don't have __iadd__; iadd returned 3

b = ['a']
operator.iadd(b, ['b'])
# lists do have __iadd__, so b is now ['a', 'b']

Calificaciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *