generador-3
¿Qué es un generador?
Un generador es una función especial en Python que produce valores sobre la marcha en lugar de crear una lista completa en memoria.
Análisis del código:
1. Definición del generador:
def cuadrados(n):
for i in range(n):
yield i ** 2yieldes la palabra clave que convierte esta función en un generadorEn lugar de
return(que termina la función),yieldpausa la función y guarda su estadoCada vez que se solicita el siguiente valor, la función continúa desde donde se pausó
2. Uso del generador:
for valor in cuadrados(5):
print(valor)¿Cómo funciona internamente?
Primera iteración:
i = 0→yield 0 ** 2→ imprime0La función se pausa
Segunda iteración:
Continúa desde
i = 1→yield 1 ** 2→ imprime1La función se pausa
Y así sucesivamente... hasta i = 4
Salida:
0
1
4
9
16Ventaja principal: ⚡
Si usaras n = 1,000,000:
Con lista normal: Ocuparía memoria para 1 millón de números
Con generador: Solo ocupa memoria para un número a la vez
El generador es eficiente en memoria porque genera valores bajo demanda en lugar de almacenarlos todos a la vez.
¿Qué es un generador infinito?
Es un generador que nunca termina por sí solo - sigue produciendo valores indefinidamente hasta que nosotros decidamos detenerlo.
Análisis del código:
1. Definición del generador infinito:
def numeros_infinito():
n = 1
while True:
yield n
n += 1while True:→ bucle infinitoyield n→ produce el valor actual denn += 1→ incrementa el contador para la siguiente iteración
2. Control del generador:
for numero in numeros_infinito():
if numero > 5:
break
print(numero)¿Cómo funciona?
Primera iteración:
El generador produce
n = 11 > 5? No → imprime1
Segunda iteración:
El generador produce
n = 22 > 5? No → imprime2
Tercera iteración:
El generador produce
n = 33 > 5? No → imprime3
Cuarta iteración:
El generador produce
n = 44 > 5? No → imprime4
Quinta iteración:
El generador produce
n = 55 > 5? No → imprime5
Sexta iteración:
El generador produce
n = 66 > 5? SÍ → ejecutabreaky termina el bucle
Salida:
1
2
3
4
5Puntos clave: 🔑
El generador es infinito pero el consumo es controlado
breakes esencial para evitar un bucle infinitoEficiencia en memoria: Solo mantiene un número en memoria a la vez
Flexibilidad: Podemos consumir tantos valores como necesitemos
Usos comunes:
Contadores infinitos
Generación de IDs secuenciales
Simulaciones que necesitan tiempo infinito
Procesamiento de streams de datos
¡El break actúa como el "freno de emergencia" que nos permite usar generadores infinitos de forma segura!
Comentarios
Publicar un comentario