Home | History | Annotate | Download | only in cpython
      1 cdef extern from "Python.h":
      2 
      3     ############################################################################
      4     # 6.5 Iterator Protocol
      5     ############################################################################
      6     bint PyIter_Check(object o)
      7     # Return true if the object o supports the iterator protocol.
      8 
      9     object PyIter_Next(object o)
     10     # Return value: New reference.
     11     # Return the next value from the iteration o. If the object is an
     12     # iterator, this retrieves the next value from the iteration, and
     13     # returns NULL with no exception set if there are no remaining
     14     # items. If the object is not an iterator, TypeError is raised, or
     15     # if there is an error in retrieving the item, returns NULL and
     16     # passes along the exception.
     17 
     18     # To write a loop which iterates over an iterator, the C code should look something like this:
     19     # PyObject *iterator = PyObject_GetIter(obj);
     20     # PyObject *item;
     21     # if (iterator == NULL) {
     22     # /* propagate error */
     23     # }
     24     # while (item = PyIter_Next(iterator)) {
     25     # /* do something with item */
     26     # ...
     27     # /* release reference when done */
     28     # Py_DECREF(item);
     29     # }
     30     # Py_DECREF(iterator);
     31     # if (PyErr_Occurred()) {
     32     # /* propagate error */
     33     # }
     34     # else {
     35     # /* continue doing useful work */
     36     # }
     37