Читать книгу El gran libro de Python - Marco Buttu - Страница 73

El protocolo de iteración

Оглавление

El protocolo de iteración se describe en la PEP-0234. Este define el comportamiento que debe tener un objeto contenedor para que puedar iterarse en él, por ejemplo, en un bucle for, para obtener sus elementos uno a uno. El protocolo se basa en un objeto denominado iterador, el cual dispone de los siguientes métodos:

• iterator._ _iter_ _(): es un método del objeto que devuelve una referencia al mismo objeto;

• iterator._ _next_ _(): es un método que devuelve el elemento siguiente del contenedor, o bien detecta una excepción de tipo StopIteration si los elementos del contenedor han sido todos devueltos.

Un objeto contenedor obj se considera iterable si es posible acceder a sus elementos mediante indexación, o bien si cuenta con un método obj._ _iter_ _() que devuelve un iterador.

Según estas definiciones, un iterador es un objeto iterable, mientras que un objeto iterable no se considera que sea un iterador. Por ejemplo, un conjunto no es un iterador porque no tiene el método set._ _next_ _():


Veamos si es un objeto iterable. En primer lugar, comprobamos que tenga un método set._ _iter_ _():


A continuación, debemos comprobar que este método devuelva un iterador. Si así fuera, el conjunto sería un objeto iterable. Vamos allá:


Ahora falta una condición para poder afirmar que obj es un interador. Su método obj._ _next_ _() debe devolver a cada llamada el elemento siguiente del contenedor y generar una excepción del tipo StopIteration cuando los elementos han terminado:


En definitiva, las instancias del tipo set son objetos iterables porque tienen un método set._ _iter_ _() que devuelve un iterador, pero no son iteradores porque no tienen el método set._ _next_ _().

Las funciones integradas iter() y next() también permiten iterar manualmente sobre un objeto iterable:


Una carácterística importante de los iteradores es que quedan vinculados al objeto iterable:


Profundizaremos en este argumento en el Capítulo 6.

El gran libro de Python

Подняться наверх