¿Qué son y cómo usar generators en Python?

Contenido del Bootcamp Dirigido por: | Última modificación: 18 de octubre de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Los generators en Python son una herramienta de gran utilidad que te facilita trabajar con grandes volúmenes de datos de manera eficiente. Si estás aprendiendo a programar y quieres aprender un poco más sobre esta función, a continuación, te explicamos qué son los generators, por qué son útiles y cómo puedes utilizarlos en tu código de Python.

Generators Python

¿Qué es un generator en Python?

Python es uno de los lenguajes de programación más importantes y es una excelente opción para quienes desean aprender a programar gracias a su sencilla sintaxis y a las diversas funciones que integra para facilitar la realización de determinadas tareas. Una de estas funciones es la de Generator (o generador), la cual te permite generar datos al momento de ejecución, así como iterar valores en una secuencia sin tener que almacenarla en la memoria.

La principal diferencia de la función generator respecto a otras es que esta usa yield para devolver un valor cada vez que se requiere, manteniendo el estado de la función hasta que vuelva a usarse, mientras otras funciones usan return para devolver un valor y terminar su ejecución. De esta manera, los generators en Python dan la posibilidad de pausar la ejecución y retomarla cuando lo necesites, lo que es muy útil para trabajar con secuencias grandes.

¿Por qué usar generators en Python?

Generator en Python es una función especialmente útil para quienes necesitan trabajar con grandes volúmenes de datos o streams infinitos, ya que generan el valor actual cuando se necesita, en lugar de cargar todos los elementos en la memoria al mismo tiempo. De esta manera, ocupa menos espacio en la memoria de la que usaría una lista o conjunto de datos.

Generators Python

¿Cómo crear un generator en Python?

Además de ser una función muy útil, es también muy sencilla de utilizar, pues sólo tienes que definir la función que quieres realizar y utilizar yield en lugar de return, por ejemplo:

def contador():
num = 0
while True:
yield num
num += 1

En este ejemplo, cada vez que invoques el generador llamado contador, el sistema te devolverá un número diferente sin necesidad de recalcular desde el principio.

Diferencias entre yield y return

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

Es importante tener en cuenta que, aunque yield y return pueden parecer funciones similares, se utilizan para obtener resultados distintos. La principal diferencia es que cuando usas return, la función devuelve un valor y termina su ejecución mientras que, al usar yield, la función se pausa y mantiene su estado hasta la próxima vez que se invoque. Podemos verlo más claramente en el siguiente cuadro:

YieldReturn
Devuelve un valor y pausa la ejecución de la funciónDevuelve un valor y sale de la función
Conserva el estado de la funciónFinaliza la ejecución de la función
Permite volver a ejecutar la función al llamar el generadorNo conserva en la memoria el estado de la función

Un ejemplo del uso de yield puede ser:

def generador_simple():
yield 1
yield 2
yield 3

Siguiendo este ejemplo, puedes obtener los valores 1, 2 y 3 al invocar el generador, sin que la función tenga que reiniciarse cada vez que se invoque.

Ventajas de usar generators en Python

Usar generators en Python supone una serie de ventajas que resultan especialmente útiles para realizar determinadas tareas en determinados contextos, por ejemplo:

Mayor eficiencia de memoria

Cuando usas un generador, puedes obtener el valor actual sin la necesidad de cargar toda la secuencia, lo que es de gran utilidad para simplificar los procesos y optimizar la memoria.

Simplicidad

Además de ser fáciles de escribir y leer, los generadores ayudan a mantener el código ordenado y ligero, especialmente cuando necesitas trabajar con secuencias grandes.

Mejora el rendimiento

Al evitar la sobrecarga de memoria, el tiempo de ejecución se reduce, optimizando el rendimiento del código.

Desventajas de usar generators en Python

Naturalmente, aunque los generators puedan ofrecer ventajas y utilidades significativas para trabajar en Python, existen determinados contextos en los que pueden suponer ciertas complicaciones, por ejemplo:

Complejiza tareas simples

Ya que son herramientas ideales para trabajar con secuencias más grandes o complejas, el uso de generators puede llegar a complicar innecesariamente el código si se requieren tareas más sencillas.

Dificultad para reiniciar

Debes crear un nuevo generador si necesitas volver al inicio de una secuencia, ya que estos no pueden reiniciarse ni ser reutilizados una vez todos sus valores han sido generados.

Menos intuitivo

Para algunos desarrolladores, el uso de generators puede ser menos intuitivo ya que la palabra yield es menos común que la palabra return. Además, puede ser confuso para un principiante entender cómo funciona el mantenimiento del estado entre llamadas.

Cada día, Python gana más importancia en el área del desarrollo y la tecnología, por lo que resulta especialmente útil conocer las herramientas que puedan ayudarte a potenciar tus resultados. Usar generators en Python te ayudará a trabajar con grandes volúmenes de datos sin saturar la memoria, con lo que podrás optimizar el rendimiento de tu código. Aprende más sobre esta y otras funciones de Python con el Bootcamp Aprende a Programar desde Cero de KeepCoding, donde encontrarás todas las herramientas que necesitas para empezar tu carrera en el sector IT.

¿Te animas a transformar hoy tu vida?

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Aprende a Programar desde Cero

Full Stack Jr. Bootcamp

Apúntate y consigue uno de los perfiles más demandados con Python en solo 4 meses.