Writing a custom iterator
Now we have all the tools to appreciate how we can write our own custom iterator. Let's first define what is an iterable and an iterator:
Iterable: An object is said to be iterable if it's capable of returning its members one at a time. Lists, tuples, strings, dicts, are all iterables. Custom objects that define either of
__iter__
or__getitem__
methods are also iterables.Iterator: An object is said to be an iterator if it represents a stream of data. A custom iterator is required to provide an implementation for
__iter__
that returns the object itself, and an implementation for__next__
, which returns the next item of the data stream until the stream is exhausted, at which point all successive calls to__next__
simply raise theStopIteration
exception. Built-in functions such asiter
andnext
are mapped to call__iter__
and__next__
on an object, behind the scenes.
Let's write an iterator that returns all the odd characters from a string first, and then the even...