Документация Python неофициальный перевод

iter.md

47 строк · 2.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.7/c-api/iter.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Протокол итератора89Есть две функции, предназначенные для работы с итераторами.1011#### `int PyIter_Check(PyObject *o)`1213Возвращает истину, если объект *o* поддерживает протокол итератора.1415#### `PyObject* PyIter_Next(PyObject *o)`1617*Возвращаемое значение: новая ссылка.*1819Возвращает следующее значение из итерации *o*. Объект должен быть итератором (проверка этого возлагается на вызывающую сторону). Если значений не осталось, возвращает `NULL` без установленного исключения. Если при получении элемента произошла ошибка, возвращает `NULL` и передаёт исключение.2021Чтобы написать цикл, который выполняет итерацию по итератору, код на C должен выглядеть примерно так:2223```c24PyObject *iterator = PyObject_GetIter(obj);25PyObject *item;2627if (iterator == NULL) {28    /* распространить ошибку */29}3031while ((item = PyIter_Next(iterator))) {32    /* сделать что-то с элементом */33    ...34    /* освободить ссылку по завершении */35    Py_DECREF(item);36}3738Py_DECREF(iterator);3940if (PyErr_Occurred()) {41    /* распространить ошибку */42}43else {44    /* продолжить выполнение полезной работы */45}46```47