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:
__getitem__methods are also iterables.
__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