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:

python
def cuadrados(n):
    for i in range(n):
        yield i ** 2
  • yield es la palabra clave que convierte esta función en un generador

  • En lugar de return (que termina la función), yield pausa la función y guarda su estado

  • Cada vez que se solicita el siguiente valor, la función continúa desde donde se pausó

2. Uso del generador:

python
for valor in cuadrados(5):
    print(valor)

¿Cómo funciona internamente?

Primera iteración:

  • i = 0 → yield 0 ** 2 → imprime 0

  • La función se pausa

Segunda iteración:

  • Continúa desde i = 1 → yield 1 ** 2 → imprime 1

  • La función se pausa

Y así sucesivamente... hasta i = 4

Salida:

text
0
1
4
9
16

Ventaja 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:

python
def numeros_infinito():
    n = 1
    while True:
        yield n
        n += 1
  • while True: → bucle infinito

  • yield n → produce el valor actual de n

  • n += 1 → incrementa el contador para la siguiente iteración

2. Control del generador:

python
for numero in numeros_infinito():
    if numero > 5:
        break
    print(numero)

¿Cómo funciona?

Primera iteración:

  • El generador produce n = 1

  • 1 > 5? No → imprime 1

Segunda iteración:

  • El generador produce n = 2

  • 2 > 5? No → imprime 2

Tercera iteración:

  • El generador produce n = 3

  • 3 > 5? No → imprime 3

Cuarta iteración:

  • El generador produce n = 4

  • 4 > 5? No → imprime 4

Quinta iteración:

  • El generador produce n = 5

  • 5 > 5? No → imprime 5

Sexta iteración:

  • El generador produce n = 6

  • 6 > 5 → ejecuta break y termina el bucle

Salida:

text
1
2
3
4
5

Puntos clave: 🔑

  1. El generador es infinito pero el consumo es controlado

  2. break es esencial para evitar un bucle infinito

  3. Eficiencia en memoria: Solo mantiene un número en memoria a la vez

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

Entradas populares de este blog

¿Qué es un Closure?

Calculadora de edad

Funciones en Python: con y sin paréntesis