¿En qué se diferencia una función generadora de una función normal?

Diferencias entre una Función Generadora y una Función Normal

Una función generadora en programación se diferencia de una función normal principalmente porque utiliza la declaración 'yield'. Pero, ¿qué significa realmente esto y cómo cambia nuestros programas?

Declaración 'yield'

La declaración 'yield' es una característica especial de las funciones generadoras que no está disponibles en las funciones normales. Eso es lo que hace especiales a las funciones generadoras.

)yield' literalmente significa 'producir', y eso es precisamente lo que hace en el contexto de una función generadora. Cuando se encuentran con la palabra clave 'yield', la función generadora produce un valor que puede ser consumido por el código que la llama, al mismo tiempo que "congela" su estado interno, es decir, mantiene en memoria los valores de sus variables locales y el punto exacto en el que se encuentra en su ejecución.

Cuando se vuelve a llamar a la función generadora, en lugar de comenzar desde el principio como una función normal, simplemente continúa desde donde lo dejó, es decir, desde la declaración 'yield' en la que se detuvo la última vez. De esta manera, las funciones generadoras pueden producir una secuencia de resultados a lo largo del tiempo, en lugar de calcularlos todos a la vez y devolverlos en una gran colección, lo que puede ser una gran ventaja en términos de eficiencia de memoria y tiempo de ejecución para conjuntos de datos particularmente grandes.

Ejemplo de uso

Considera la siguiente función generadora en Python que produce números fibonacci:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

Esta función producirá la secuencia de números de Fibonacci de manera infinita, cada vez que se le solicite. No necesitas saber cuántos números de Fibonacci necesitarás de antemano ni mantenerlos todos en memoria.

En conclusión, el uso correcto de la declaración 'yield' y por tanto de las funciones generadoras, puede permitir al desarrollador diseñar con eficacia programas más eficientes y limpias. Es una poderosa herramienta para tener en cuenta al manejar secuencias de datos a gran escala.

¿Te resulta útil?