ASPN ActiveState Programmer Network
  ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups | Web Services
SEARCH
advanced | search help

Reference
ActivePython 2.4
Python Documentation
Python/C API
6. Abstract Objects Layer
6.1 Object Protocol
6.2 Number Protocol
6.3 Sequence Protocol
6.4 Mapping Protocol
6.5 Iterator Protocol
6.6 Buffer Protocol

MyASPN >> Reference >> ActivePython 2.4 >> Python Documentation >> Python/C API >> 6. Abstract Objects Layer
ActivePython 2.4 documentation


6.5 Iterator Protocol

New in version 2.2.

There are only a couple of functions specifically for working with iterators.

int PyIter_Check(PyObject *o)
Return true if the object o supports the iterator protocol.

PyObject* PyIter_Next(PyObject *o)
Return value: New reference.
Return the next value from the iteration o. If the object is an iterator, this retrieves the next value from the iteration, and returns NULL with no exception set if there are no remaining items. If the object is not an iterator, TypeError is raised, or if there is an error in retrieving the item, returns NULL and passes along the exception.

To write a loop which iterates over an iterator, the C code should look something like this:

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 */
}

See About this document... for information on suggesting changes.

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState 2004 All rights reserved