Protocolo iterador
******************

Hay dos funciones específicas para trabajar con iteradores.

int PyIter_Check(PyObject *o)

   Retorna verdadero si el objeto *o* admite el protocolo iterador.
   Esta función siempre finaliza con éxito.

PyObject* PyIter_Next(PyObject *o)
    *Return value: New reference.*

   Retorna el siguiente valor de la iteración *o*. El objeto debe ser
   un iterador (depende de quién llama comprobar esto). Si no quedan
   valores restantes, retorna "NULL" sin establecer ninguna excepción.
   Si se produce un error al recuperar el elemento, retorna "NULL" y
   pasa la excepción.

Para escribir un bucle que itera sobre un iterador, el código en C
debería verse así:

   PyObject *iterator = PyObject_GetIter(obj);
   PyObject *item;

   if (iterator == NULL) {
       /* propagate error */
   }

   while ((item = PyIter_Next(iterator))) {
       /* do something with item */
       ...
       /* release reference when done */
       Py_DECREF(item);
   }

   Py_DECREF(iterator);

   if (PyErr_Occurred()) {
       /* propagate error */
   }
   else {
       /* continue doing useful work */
   }
