Home | History | Annotate | Download | only in c-api
      1 .. highlightlang:: c
      2 
      3 .. _iterator:
      4 
      5 Iterator Protocol
      6 =================
      7 
      8 There are two functions specifically for working with iterators.
      9 
     10 .. c:function:: int PyIter_Check(PyObject *o)
     11 
     12    Return true if the object *o* supports the iterator protocol.
     13 
     14 
     15 .. c:function:: PyObject* PyIter_Next(PyObject *o)
     16 
     17    Return the next value from the iteration *o*.  The object must be an iterator
     18    (it is up to the caller to check this).  If there are no remaining values,
     19    returns *NULL* with no exception set.  If an error occurs while retrieving
     20    the item, returns *NULL* and passes along the exception.
     21 
     22 To write a loop which iterates over an iterator, the C code should look
     23 something like this::
     24 
     25    PyObject *iterator = PyObject_GetIter(obj);
     26    PyObject *item;
     27 
     28    if (iterator == NULL) {
     29        /* propagate error */
     30    }
     31 
     32    while (item = PyIter_Next(iterator)) {
     33        /* do something with item */
     34        ...
     35        /* release reference when done */
     36        Py_DECREF(item);
     37    }
     38 
     39    Py_DECREF(iterator);
     40 
     41    if (PyErr_Occurred()) {
     42        /* propagate error */
     43    }
     44    else {
     45        /* continue doing useful work */
     46    }
     47