Los iteradores y Generadores en Python es de los conceptos mas interesantes en python, si tu objetivo es crear algo mas simple que “Hello Word/HolaMundo”, probablemente utilices los objectos iterables, los objectos iterables están conformados por “Iteration Protocol”.

Iterador

Implementar el protocolo de iteración es relativamente sencillo, para ejemplificar esto crearemos la clásica Sucesion de Fibonacci

Creamos una clase que implementa el protocolo de iteración, este protocolo se apoya en dos métodos __iter__  y __next__ , el método __iter__ devuelve el objeto que haríamos iterar y el método __next__  se llama automáticamente en cada iteración y devuelve el valor actual de la iteración.

Generadores

Los generadores son otra forma de crear objectos iterables , normalmente son objectos invocables como las funciones y los métodos, regularmente se utilizan cuando se desean crear objectos iterables rápidamente sin la necesidad de una clase y la adopción del protocolo de iteracion. Para crear un generador se necesita definir una función y la expresión yield en lugar de return.

La sucesión de Fibonacci quedaría como:

La expresion yield nos permite general valores justo cuando se necesitan, es decir justo antes de solicitar el siguiente valor, la gran diferencia es que estos elementos no se almacenan si no que se generan en tiempo de ejecución, esto ofrece muchísimas ventajas en términos de memoria, pero al ser un objeto iterador solo es recorrido una vez.

Los objetos iterables se pueden combinar de forma natural con otras funcionalidades de python como “list comprehension, map, reduce” brindándonos un gran abanico de posibilidades a la hora de crear código.

 

Share: