diff options
Diffstat (limited to 'Doc/c-api/iter.rst')
-rw-r--r-- | Doc/c-api/iter.rst | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/Doc/c-api/iter.rst b/Doc/c-api/iter.rst index 0224d37..4f70882 100644 --- a/Doc/c-api/iter.rst +++ b/Doc/c-api/iter.rst @@ -1,23 +1,30 @@ -.. highlight:: c +.. highlightlang:: c .. _iterator: Iterator Protocol ================= +.. versionadded:: 2.2 + There are two functions specifically for working with iterators. + .. c:function:: int PyIter_Check(PyObject *o) Return true if the object *o* supports the iterator protocol. + This function can return a false positive in the case of old-style + classes because those classes always define a :c:member:`tp_iternext` + slot with logic that either invokes a :meth:`next` method or raises + a :exc:`TypeError`. .. c:function:: PyObject* PyIter_Next(PyObject *o) Return the next value from the iteration *o*. The object must be an iterator (it is up to the caller to check this). If there are no remaining values, - returns ``NULL`` with no exception set. If an error occurs while retrieving - the item, returns ``NULL`` and passes along the exception. + returns *NULL* with no exception set. If an error occurs while 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:: @@ -29,7 +36,7 @@ something like this:: /* propagate error */ } - while (item = PyIter_Next(iterator)) { + while ((item = PyIter_Next(iterator))) { /* do something with item */ ... /* release reference when done */ |