blob: 3f0f554dadf9739fd509c21cae8564a260b60d56 [file] [log] [blame]
Georg Brandl54a3faa2008-01-20 09:30:57 +00001.. highlightlang:: c
2
3.. _iterator:
4
5Iterator Protocol
6=================
7
8There are only a couple of functions specifically for working with iterators.
9
Georg Brandl60203b42010-10-06 10:11:56 +000010.. c:function:: int PyIter_Check(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +000011
12 Return true if the object *o* supports the iterator protocol.
13
14
Georg Brandl60203b42010-10-06 10:11:56 +000015.. c:function:: PyObject* PyIter_Next(PyObject *o)
Georg Brandl54a3faa2008-01-20 09:30:57 +000016
17 Return the next value from the iteration *o*. If the object is an iterator,
18 this retrieves the next value from the iteration, and returns *NULL* with no
19 exception set if there are no remaining items. If the object is not an
20 iterator, :exc:`TypeError` is raised, or if there is an error in retrieving the
21 item, returns *NULL* and passes along the exception.
22
23To write a loop which iterates over an iterator, the C code should look
24something like this::
25
26 PyObject *iterator = PyObject_GetIter(obj);
27 PyObject *item;
28
29 if (iterator == NULL) {
30 /* propagate error */
31 }
32
33 while (item = PyIter_Next(iterator)) {
34 /* do something with item */
35 ...
36 /* release reference when done */
37 Py_DECREF(item);
38 }
39
40 Py_DECREF(iterator);
41
42 if (PyErr_Occurred()) {
43 /* propagate error */
44 }
45 else {
46 /* continue doing useful work */
47 }