Nota
¡Ayúdanos a traducir la documentación oficial de Python al Español! Puedes encontrar más información en Como contribuir. Ayuda a acercar Python a más personas de habla hispana.
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 admite el protocolo de iterador y
0
en 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 “obj” proporciona protocolos
AsyncIterator
y0
en caso contrario. Esta función siempre tiene éxito.Nuevo en la versión 3.10.
-
PyObject *
PyIter_Next
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI.
Retorna el siguiente valor de la iteración o. El objeto debe ser un iterador (depende de quién llama comprobar esto). Si no quedan valores restantes, retorna
NULL
sin establecer ninguna excepción. Si se produce un error al recuperar el elemento, retornaNULL
y pasa 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()
.Nuevo en la versión 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_RETURN
si el iterador regresa. El valor de retorno se retorna a través de presult.PYGEN_NEXT
si el iterador cede. El valor cedido se retorna a través de presult.PYGEN_ERROR
si el iterador ha lanzado una excepción. presult se establece enNULL
.
Nuevo en la versión 3.10.