Протокол итератора¶Iterator Protocol
Есть две функции, предназначенные для работы с итераторами.
-
int PyIter_Check(PyObject *o)¶
- Часть Stable ABI с версии 3.8.
Возвращает ненулевое значение, если объект o можно безопасно передать в
PyIter_NextItem(), и0в противном случае. Эта функция всегда завершается успешно.
-
int PyAIter_Check(PyObject *o)¶
- Часть Stable ABI начиная с версии 3.10.
Возвращает ненулевое значение, если объект o предоставляет
AsyncIteratorпротокол, и0в противном случае.Добавлено в версии 3.10.
-
int PyIter_NextItem(PyObject *iter, PyObject **item)¶
- Часть Stable ABI начиная с версии 3.14.
Возвращает
1и устанавливает item в сильная ссылка следующего значения итератора iter при успехе. Возвращает0и устанавливает item вNULL, если значений больше нет. Возвращает-1, устанавливает item вNULLи устанавливает исключение при ошибке.Добавлено в версии 3.14.
-
PyObject *PyIter_Next(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Это старая версия
PyIter_NextItem(), которая сохранена для обратной совместимости. Предпочтительнее использоватьPyIter_NextItem().Возвращает следующее значение из итератора o. Объект должен быть итератором согласно
PyIter_Check()(проверка этого возлагается на вызывающего). Если значений больше нет, возвращаетNULLбез установки исключения. Если при получении элемента происходит ошибка, возвращаетNULLи передаёт исключение.
-
type PySendResult¶
Значение перечисления, используемое для представления различных результатов
PyIter_Send().Добавлено в версии 3.10.
-
PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)¶
- Часть Stable ABI начиная с версии 3.10.
Отправляет значение arg в итератор iter. Возвращает:
PYGEN_RETURN, если итератор возвращает значение. Возвращаемое значение передаётся через presult.PYGEN_NEXT, если итератор выдаёт значение. Полученное значение передаётся через presult.PYGEN_ERRORесли итератор выбросил исключение. presult устанавливается вNULL.
Добавлено в версии 3.10.