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 y 0 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, retorna NULL 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 en NULL.

Nuevo en la versión 3.10.