Puedes ejecutar cualquier ejemplo de esta guía directamente en nuestra consola interactiva: Abrir consola de Python →
Generadores en Python: iteración eficiente y memoria optimizada
Los generadores permiten crear iteradores de forma eficiente, produciendo valores uno a uno sin almacenar listas completas en memoria. Son ideales para manejar grandes cantidades de datos, streams y operaciones secuenciales.
Tabla de contenidos
1. ¿Qué es un generador?
Un generador es una función que devuelve valores uno a uno usando yield, en lugar de crear listas completas.
def contador():
yield 1
yield 2
yield 3
2. La palabra clave yield
yield pausa la función y devuelve un valor, retomando desde ese punto en la siguiente llamada.
def pares(n):
for i in range(n):
if i % 2 == 0:
yield i
for p in pares(10):
print(p)
3. Generadores por expresión
Son similares a las list comprehensions, pero con paréntesis.
gen = (x * 2 for x in range(5))
for n in gen:
print(n)
4. Ventajas de los generadores
- Consumen menos memoria.
- Son más rápidos en iteraciones grandes.
- Permiten procesar streams de datos.
- Evitan crear listas innecesarias.
5. Ejercicios
- Crear un generador que devuelva números del 1 al 5.
- Crear un generador que devuelva cuadrados.
- Crear un generador que filtre números pares.
- Crear un generador por expresión.
- Crear un generador que devuelva letras de una palabra.
def gen():
for i in range(1, 6):
yield i
def cuadrados(n):
for i in range(n):
yield i*i
def pares(n):
for i in range(n):
if i % 2 == 0:
yield i
(x for x in range(5))
def letras(palabra):
for l in palabra:
yield l
6. Mini‑proyecto: Generador de líneas de archivo
def leer_lineas(ruta):
with open(ruta, "r") as archivo:
for linea in archivo:
yield linea.strip()
for linea in leer_lineas("datos.txt"):
print(linea)
7. Preguntas frecuentes
¿Los generadores reemplazan listas?
No, solo cuando necesitas eficiencia.
¿Puedo convertir un generador en lista?
Sí, usando list(generador).