Por qué y cómo uso generadores en python

Generator es una característica poderosa en Python y lo ayuda a escribir un código mejor y más organizado.

POR QUÉ los uso

Procesar datos secuenciales significa limpiar, filtrar, transformar datos para el siguiente proceso o almacenarlos en una base de datos. Una lista es útil para implementar tales acciones.

Enumere una estructura de datos típica y de propósito general en Python. Uso la lista a menudo, pero no es una opción brillante para el tamaño de datos volátiles. Por ejemplo, una lista puede tener 5, 100, 10 000 o 5 00 0000 elementos o incluso más.


def scale_to_log10(till_number):

 log10_number_seq = []

 for num in range(1, till_number):

     log10_number_seq.append(math.log10(num))

 return log10_number_seq

El código anterior es simplemente agradable y dará el resultado esperado, si es que lo hace 😃.

Si el argumento ’till_number’, pasado a la función de rango, es alto. Lo que puede hacer que cree una lista en la memoria, que es cargando datos en ella. Y si su programa tiene la suerte de estar ejecutándose en un espacio de memoria eterno, entonces todo estará bien. Ahora imagine esto, el tamaño de la lista generada por el rango de funciones es de 4 GB y el tamaño de la memoria es de 2 GB, ay. Esto hará que el proceso sea lento y puede fallar con un error de falta de memoria, y asumirán que no eres un buen desarrollador. 😕.

Como un buen desarrollador, si no el mejor, debemos asegurarnos de que la función que estamos escribiendo funcione como se espera sin abusar de los recursos físicos llamados memoria de acceso aleatorio (RAM) y unidad central de procesamiento (CPU).

CÓMO los uso

Para evitar el peor de los casos en que el proceso se bloquee y se sobrecargue la memoria, otros procesos podrían usar, yo uso generadores.

Aquí está el fragmento.

Para Python2:


def scale_to_log10(till_number):

    for num in xrange(1, till_number):

        yield math.log10(num)

Para Python3:


def scale_to_log10(till_number):

    for num in range(1, till_number):

        yield math.log10(num)

Note que el range La función de generador en python3 es como la range en python2.

La variación entre los dos métodos es clara. El método lleva a cabo el generador utiliza la declaración de rendimiento en lugar de la declaración de retorno y además utiliza la función xrange en lugar de la función de rango. Este es el caso de la carga diferida o el procesamiento diferido. Almacena solo el elemento de procesamiento en la memoria, no la lista completa.

En python3, la función range es la misma que la función xrange en python2. lo que significa que devuelve el objeto generador en python3 y la lista en python2.

En conclusión

Considere el uso de generadores cuando trabaje con datos secuenciales potencialmente grandes. Los generadores son eficientes cuando se trata de un gran flujo secuencial de datos, por lo que podemos usarlos como componentes básicos de funciones que ayudan a diseñar una mejor estructura.

Similar Posts

Leave a Reply

Your email address will not be published.