Expresiones generadoras
Escriba pipelines diferidos y compactos
Expresiones generadoras es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
De la comprensión de listas a la expresión generadora
Una expresión generadora se parece a una comprensión de listas, pero utiliza paréntesis en lugar de corchetes. Produce valores de forma perezosa en vez de crear una lista completa.
list_comp = [x * x for x in range(5)]
gen_expr = (x * x for x in range(5))
print(list_comp)
print(gen_expr)
print(list(gen_expr))Diferencia en el uso de memoria
Una comprensión de listas reserva espacio para todos los elementos desde el principio. Una expresión generadora prácticamente no almacena nada hasta que se solicitan valores. Compare sus tamaños.
import sys
lst = [x for x in range(10000)]
gen = (x for x in range(10000))
print('list bytes:', sys.getsizeof(lst))
print('gen bytes:', sys.getsizeof(gen))Iterar una expresión generadora
Puede consumir una expresión generadora como cualquier iterador: con un bucle for, mediante next() o pasándola a una función.
gen = (c.upper() for c in 'hello')
for ch in gen:
print(ch)Filtrar con if
Añada una cláusula if para conservar únicamente los elementos que coincidan, exactamente igual que en una comprensión.
evens = (n for n in range(10) if n % 2 == 0)
print(list(evens))Pasar directamente a funciones
Cuando una expresión generadora es el único argumento de una función, puede omitir los paréntesis adicionales. Es una forma clara de evitar la creación de una lista temporal.
total = sum(x * x for x in range(5))
print(total)
biggest = max(len(w) for w in ['a', 'abc', 'ab'])
print(biggest)Recordatorio: son de un solo uso
Una expresión generadora se agota después de recorrerla una vez, igual que una función generadora. En la segunda iteración no produce nada.
gen = (x for x in range(3))
print(list(gen))
print(list(gen))Encadenar expresiones
Puede pasar una expresión generadora a otra para crear una canalización perezosa. No se calcula nada hasta que el consumidor final solicita valores.
nums = (n for n in range(10))
evens = (n for n in nums if n % 2 == 0)
doubled = (n * 2 for n in evens)
print(list(doubled))any() y all()
Las expresiones generadoras resultan especialmente útiles con any() y all() porque pueden terminar anticipadamente y detenerse en cuanto se conoce la respuesta.
words = ['cat', 'dog', 'elephant']
print(any(len(w) > 5 for w in words))
print(all(len(w) >= 3 for w in words))Bucles anidados
Al igual que las comprensiones, las expresiones generadoras admiten varias cláusulas for, que se leen de izquierda a derecha.
pairs = ((x, y) for x in range(2) for y in range(2))
print(list(pairs))Ejemplo de canalización perezosa
Esta es una pequeña canalización de procesamiento de texto. Cada etapa es perezosa, por lo que sería posible procesar un archivo enorme en flujo sin cargarlo por completo.
lines = [' alpha ', '', ' beta', 'gamma ']
stripped = (line.strip() for line in lines)
nonempty = (line for line in stripped if line)
print(list(nonempty))Cuándo elegir cada opción
Utilice una comprensión de listas cuando necesite los datos varias veces o necesite indexarlos. Utilice una expresión generadora para procesar datos en flujo en una sola pasada o para trabajar con grandes volúmenes de datos.
data = range(6)
as_list = [x + 1 for x in data]
print(as_list[0], as_list[-1])
total = sum(x + 1 for x in data)
print(total)Comprobación rápida
Compruebe su comprensión de las expresiones generadoras.
Resumen
Ha aprendido sobre las expresiones generadoras:
- Utilizan paréntesis como alternativa perezosa a las comprensiones de listas.
- Ahorran memoria y admiten filtros
ify bucles anidados. - Se combinan bien con
sum,any,ally el encadenamiento. - Son de un solo uso.
A continuación: composición de generadores con yield from.
Preguntas frecuentes
¿La lección «Expresiones generadoras» es gratis?
Sí — el texto completo de «Expresiones generadoras» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Expresiones generadoras»?
Escriba pipelines diferidos y compactos Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Expresiones generadoras»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- El protocolo de iteradores
- Funciones generadoras
- Expresiones generadoras
- yield from y delegación