Python Iterators: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 22: Line 22:
</syntaxhighlight>
</syntaxhighlight>


When no more data are available a <code>StopIteration</code> exception is raised instead. At this point, the iterator object is exhausted and any further calls to its <code>__next__()</code> method just raise <code>StopIteration</code> again.
When no more data are available a <code>StopIteration</code> exception is raised instead. At this point, the iterator object is exhausted and any further calls to its <code>__next__()</code> method just raise <code>StopIteration</code> again. There's no <code>has_next()</code> method that tests the availability of a next item without consuming it. Unavailability of a next item is tested by checking the <code>StopIteration</code> exception.
 
 
There's no <code>has_next()</code> method that tests the availability of a next item without consuming it. Unavailability of a next item is tested by checking the <code>StopIteration</code> exception.
<syntaxhighlight lang='py'>
<syntaxhighlight lang='py'>
try:
try:

Revision as of 05:12, 7 July 2022

External

Internal

TODO

TO PROCESS PyOOP "The Iterator Pattern" + "Iterators" + "The iterator protocol"

Overview

An iterator instance represents a stream of data.

The iterator instances are created from iterable objects with the built-in function iter():

l = ['a', 'b', 'c']
i = iter(l)

Once created, repeated invocations of the iterator's __next__() method, or by passing it to the built-in function next(), return successive items in the stream:

assert next(i) == 'a'
assert next(i) == 'b'
assert next(i) == 'c'

When no more data are available a StopIteration exception is raised instead. At this point, the iterator object is exhausted and any further calls to its __next__() method just raise StopIteration again. There's no has_next() method that tests the availability of a next item without consuming it. Unavailability of a next item is tested by checking the StopIteration exception.

try:
    while True:
        arg = next(i)
        print(arg)
except StopIteration:
    pass

If you are OK to always consume the next item, the end of the iterator can be tested with:

...
next(i, None) is not None