迭代器协议¶
有两个函数专门用于使用迭代器。
-
PyObject *PyIter_Next(PyObject *o)¶
- Return value: New reference.
返回迭代的下一个值 o . 对象必须是迭代器(由调用方检查)。如果没有剩余值,则返回
NULL
没有异常集。如果检索项时发生错误,则返回NULL
并传递例外。
要编写一个在迭代器上迭代的循环,C代码应该如下所示:
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 */
}
-
type PySendResult¶
用于表示的不同结果的枚举值
PyIter_Send()
。3.10 新版功能.
-
PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)¶
将 arg 值传入迭代器 iter 。退货:
PYGEN_RETURN
如果迭代器返回。返回值通过以下方式返回 结果前 。PYGEN_NEXT
如果迭代器屈服。产出值通过以下方式返回 结果前 。PYGEN_ERROR
如果迭代器已引发和异常。 结果前 设置为NULL
。
3.10 新版功能.