¿Qué es una expresión generadora?
sobes.tech AI
Respuesta de la IA
Una expresión generadora es una forma concisa de crear un generador. Es similar a una comprensión de listas, pero en lugar de crear una lista completa en memoria, devuelve un iterador que genera elementos según sea necesario.
Ventajas:
- Ahorro de memoria, especialmente al trabajar con grandes volúmenes de datos.
- Evaluación perezosa: los elementos se generan solo cuando se solicitan.
- Sintaxis más concisa en comparación con una función generadora.
Sintaxis:
# (expresión for elemento en objeto_iterable if condición)
Ejemplo:
# Expresión generadora para números pares del 0 al 9
even_numbers_generator = (x for x in range(10) if x % 2 == 0)
# Uso del generador
print(next(even_numbers_generator)) # 0
print(next(even_numbers_generator)) # 2
Comparación con función generadora:
Las funciones generadoras se crean usando la palabra clave yield. Son más flexibles y pueden tener lógica más compleja, incluyendo mantener estado entre llamadas.
# Función generadora para números pares
def generate_even_numbers(limit):
for x in range(limit):
if x % 2 == 0:
yield x
# Uso de la función generadora
even_gen = generate_even_numbers(10)
print(next(even_gen)) # 0
Comparación con comprensión de listas:
La comprensión de listas crea y devuelve una lista completa.
# Comprensión de listas para números pares
even_numbers_list = [x for x in range(10) if x % 2 == 0]
print(even_numbers_list) # [0, 2, 4, 6, 8]
Tabla de diferencias:
| Característica | Expresión generadora | Comprensión de listas |
|---|---|---|
| Objeto creado | Generador (iterador) | Lista |
| Memoria | Ahorra | Usa mucha memoria |
| Evaluación | Perezosa | Inmediata |
| Sintaxis | Concisa | Concisa |
Uso de yield |
No | No |
Las expresiones generadoras se usan frecuentemente en bucles for, en argumentos de funciones que necesitan un iterador (por ejemplo, sum(), max()), o cuando se necesita recorrer los elementos una sola vez sin almacenarlos en memoria.