Протокол итератора¶
Существуют две функции, специально предназначенные для работы с итераторами.
- 
PyObject* 
PyIter_Next(PyObject *o)¶ - Return value: New reference.
Возвращает следующее значение из o итерации. Объект должен быть итератором (это должен проверить вызывающий). Если оставшиеся значения отсутствуют, возвращает
NULLбез набора исключений. Если при извлечении элемента возникает ошибка, возвращаетNULLи передает исключение. 
Чтобы написать цикл, который повторяет итератор, C код должен выглядеть примерно так:
PyObject *iterator = PyObject_GetIter(obj);
PyObject *item;
if (iterator == NULL) {
    /* распространять ошибку */
}
while ((item = PyIter_Next(iterator))) {
    /* сделать что-нибудь с элементом */
    ...
    /* отпустить ссылку, когда будет сделано */
    Py_DECREF(item);
}
Py_DECREF(iterator);
if (PyErr_Occurred()) {
    /* распространять ошибку */
}
else {
    /* продолжать делать полезную работу */
}
