¿Qué son los generadores en Python?

En esencia, un generador es una función especial que utiliza la sentencia yield para producir valores uno por uno en lugar de calcular y almacenar todos los valores en la memoria. Esto tiene beneficios significativos en términos de eficiencia y consumo de memoria, ya que los generadores solo mantienen en memoria el valor actual en […]

En esencia, un generador es una función especial que utiliza la sentencia yield para producir valores uno por uno en lugar de calcular y almacenar todos los valores en la memoria. Esto tiene beneficios significativos en términos de eficiencia y consumo de memoria, ya que los generadores solo mantienen en memoria el valor actual en lugar de toda la secuencia.

Ejemplo 1: Generadores para Iterar Sobre Grandes Conjuntos de Datos

Supongamos que necesitas procesar una gran cantidad de datos almacenados en un archivo. Utilizar una lista para almacenar todos los datos podría agotar la memoria del sistema. En cambio, puedes usar un generador para leer los datos línea por línea, procesarlos y liberar la memoria inmediatamente:

				
					def data_generator(filename):
    with open(filename, 'r') as file:
        for line in file:
            yield line.strip()

for data_entry in data_generator('datos.txt'):
    process_data(data_entry)
				
			

Ejemplo 2: Generadores Infinitos para Secuencias Matemáticas

Los generadores también son ideales para crear secuencias matemáticas infinitas, como la serie de Fibonacci. A diferencia de las listas, que no podrían almacenar una serie infinita, un generador puede generar valores indefinidamente.

Entre llamada y llamada el objeto iterable queda en pausa (suspensión), es muy útil cuando hay que trabajar con listas muy grandes o indeterminadas, trabajando uno por uno de los resultados:

				
					def fibonacci_generator():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

fib_gen = fibonacci_generator()
for i in range(10):
    print(next(fib_gen))
    #Aquí va el resto de código
    #
    #Fin del resto de código
				
			

Ejemplo 3: Generadores para Procesamiento por Lotes (Batch Processing)

Imagina que estás trabajando con un modelo de aprendizaje automático que requiere procesar grandes conjuntos de datos por lotes. Un generador puede ayudarte a cargar y procesar datos por lotes de manera eficiente:

				
					def batch_generator(data, batch_size):
    for i in range(0, len(data), batch_size):
        yield data[i:i+batch_size]

data = range(1000)
batch_size = 50
batch_gen = batch_generator(data, batch_size)
for batch in batch_gen:
    process_batch(batch)






				
			

Conclusión

Los generadores en Python son una herramienta esencial para manejar grandes conjuntos de datos de manera eficiente y flexible. Al utilizar la sentencia yield, es posible generar valores sobre la marcha en lugar de almacenarlos todos en la memoria, lo que ahorra recursos y permite trabajar con conjuntos de datos extensos o incluso infinitos. Ya sea para procesar archivos, crear secuencias matemáticas infinitas o realizar procesamiento por lotes, los generadores demuestran ser una solución efectiva en una variedad de escenarios. Aprovecha esta potente característica para mejorar el rendimiento y la eficiencia de tus programas en Python.

Deja un comentario

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

Scroll al inicio