Sobes.tech
Junior

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