Python Iterators

Created with Sketch.

Python Iterators

Summary: in this tutorial, you’ll learn about Python iterator and how to define a custom iterator using the iterator protocol.

What is a Python iterator?

An iterator is an object that implements:

  • __iter__ method that returns the object itself.
  • __next__ method that returns the next item. If all the items have been returned, the method raises a StopIteration exception.

Note that these two methods are also known as the iterator protocol.

Python allows you to use iterators in for loops, comprehensions, and other built-in functions including map, filter, reduce, and zip.

Python iterator example

The following example defines Square iterator class that returns the square numbers. Note that a square number is a product of an integer with itself.

class Square:
def __init__(self, length):
self.length = length
self.current = 0

def __iter__(self):
return self

def __next__(self):
if self.current >= self.length:
raise StopIteration

self.current += 1
return self.current ** 2

Code language: Python (python)

How it works.

First, initialize the length and current attributes in the __init__ method.

The length attribute specifies the number of square numbers that the class should return. And the current attribute keeps track of the current integer..

Second, implement the __iter__ method that returns the self object.

Third, implement the __next__ method that returns the next square number. If the number of square numbers have been returned is greater than the length, the __next__ method raises the StopIteration exception.

Using the iterator object

The following shows how to use the Square iterator in a for loop:

square = Square(5)

for sq in square:
print(sq)

Code language: Python (python)

How it works:

  • First, create a new instance of the Square class.
  • Then, use the for loop to iterate over items of the square iterator.

Once you iterate over all the items, the iterator is exhausted. It means you need to create a new iterator to iterate over its items again.

If you attempt to use the iterator that is already exhausted, you’ll get the StopIteration exception. For example:

next(square)

 

Error:

StopIteration

Code language: JavaScript (javascript)

Also, an iterator cannot be restarted because it only has the __next__ method that returns the next item from a collection.

Summary

  • An iterator is an object that implements __iter__ and __next__ methods.
  • An iterator cannot be reusable once all items have been returned.

Leave a Reply

Your email address will not be published. Required fields are marked *