1.. highlight:: c 2 3.. _iterator: 4 5Iterator Protocol 6================= 7 8There 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 22To write a loop which iterates over an iterator, the C code should look 23something 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