迭代器协议¶
有两个专门用于处理迭代器的函数。
-
int PyIter_Check(PyObject *o)¶
- 自 3.8 版本以来,作为稳定 ABI 的一部分。
如果对象 o 可以安全地传递给
PyIter_NextItem()
,则返回非零值;否则返回0
。此函数总是成功的。
-
int PyAIter_Check(PyObject *o)¶
- 自 3.10 版本以来,作为 稳定 ABI 的一部分。
如果对象 o 提供了
AsyncIterator
协议,则返回非零值;否则返回0
。此函数总是成功的。在 3.10 版本加入。
-
int PyIter_NextItem(PyObject *iter, PyObject **item)¶
- 自 3.14 版本以来,作为 稳定 ABI 的一部分。
成功时返回
1
并将 item 设置为迭代器 iter 的下一个值的强引用。如果没有剩余的值,则返回0
并将 item 设置为NULL
。如果发生错误,则返回-1
,将 item 设置为NULL
并设置一个异常。在 3.14 版本加入。
-
PyObject *PyIter_Next(PyObject *o)¶
- 返回值: 新引用。 稳定ABI 的一部分。
这是
PyIter_NextItem()
的旧版本,为了向后兼容而保留。请优先使用PyIter_NextItem()
。返回迭代器 o 的下一个值。根据
PyIter_Check()
,该对象必须是一个迭代器(由调用者负责检查)。如果没有剩余的值,则返回NULL
且不设置异常。如果在获取项时发生错误,则返回NULL
并传递异常。
-
type PySendResult¶
用于表示
PyIter_Send()
不同结果的枚举值。在 3.10 版本加入。