Curso de python nivel medio

Un generador es una función que permite crear un iterador de una manera más eficiente, sin necesidad de almacenar toda la secuencia de valores en memoria. Los generadores utilizan la palabra clave yield para devolver valores uno a uno.

¿Cómo funcionan los generadores?

En lugar de devolver un único valor como en una función normal con return, un generador usa yield para devolver un valor y luego pausa la ejecución de la función, de modo que cuando se solicita el siguiente valor, la ejecución continúa desde donde se quedó.

Ejemplo básico de generador:

1def contar_hasta_tres():
2    yield 1
3    yield 2
4    yield 3
5
6# Usando el generador
7contador = contar_hasta_tres()
8
9for numero in contador:
10    print(numero)
Salida de Consola!:
1
2
3

Ventajas de los generadores

  • Eficiencia en memoria: Los generadores no cargan toda la secuencia de datos en memoria, sino que generan cada valor a medida que es necesario.
  • Pausas y reanudación: Un generador puede ser pausado en cualquier momento, y su estado es guardado. Se puede reanudar desde el último yield cuando sea necesario.

Generador infinito

Un generador puede ser infinito, lo que significa que puede generar una secuencia de valores sin fin:

1def contar_infinito():
2    num = 1
3    while True:
4        yield num
5        num += 1
6
7# Usando el generador infinito
8contador = contar_infinito()
9
10# Solo queremos imprimir los primeros 5 números
11for _ in range(5):
12    print(next(contador))
Salida de Consola!:
1
2
3
4
5

Usando generadores con next()

El generador puede ser controlado usando la función next(), que devuelve el siguiente valor generado. Si el generador no tiene más valores que devolver, lanzará una excepción StopIteration.

1def contar_infinito():
2    num = 1
3    while True:
4        yield num
5        num += 1
6
7gen = contar_infinito()
8print(next(gen))  # 1
9print(next(gen))  # 2
Salida de Consola!:
1
2
  • Loading...