Protocolo iterador¶
Hay dos funciones específicas para trabajar con iteradores.
-
int PyIter_Check(PyObject *o)¶
- Part of the Stable ABI since version 3.8.
Retorna un valor distinto de cero si el objeto o puede pasarse de manera segura a
PyIter_Next(), y0en caso contrario. Esta función siempre tiene éxito.
-
int PyAIter_Check(PyObject *o)¶
- Part of the Stable ABI since version 3.10.
Retorna un valor distinto de cero si el objeto o proporciona el protocolo
AsyncIterator, y0en caso contrario. Esta función siempre tiene éxito.Added in version 3.10.
-
PyObject *PyIter_Next(PyObject *o)¶
- Return value: New reference. Part of the Stable ABI.
Retorna el siguiente valor del iterador o. El objeto debe ser un iterador según
PyIter_Check()(depende del llamador verificar esto). Si no hay valores restantes, retornaNULLsin establecer una excepción. Si ocurre un error al recuperar el elemento, devuelveNULLy envía la excepción.
Para escribir un bucle que itera sobre un iterador, el código en C debería verse así:
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¶
El valor de enumeración utilizado para representar diferentes resultados de
PyIter_Send().Added in version 3.10.
-
PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)¶
- Part of the Stable ABI since version 3.10.
Envía el valor arg al iterador iter. Retorna:
PYGEN_RETURNsi el iterador regresa. El valor de retorno se retorna a través de presult.PYGEN_NEXTsi el iterador cede. El valor cedido se retorna a través de presult.PYGEN_ERRORsi el iterador ha lanzado una excepción. presult se establece enNULL.
Added in version 3.10.