Example 1: Building a Basic Custom Iterator
Let’s build a basic iterator that generates a sequence of square numbers. We’ll start by creating a class that implements the iterator protocol.
Initialization: The SquareIterator class is initialized with a maximum value max_n, which determines how many squares will be generated. The current attribute keeps track of the current number being squared.
Iteration: The __iter__ method is straightforward; it returns the iterator object itself (self). This method is necessary to make our object an iterator.
Generating Values: The __next__ method is where the core logic resides. It checks if the current value has exceeded the maximum (max_n). If it has, it raises a StopIteration exception, which stops the iteration. Otherwise, it calculates the square of the current value, increments current, and returns the squared value.
class SquareIterator:
def __init__(self, max_n):
self.max_n = max_n
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current > self.max_n:
raise StopIteration
result = self.current ** 2
self.current += 1
return result
# Using the custom iterator
square_iter = SquareIterator(5)
for num in square_iter:
print(num)
Output:
0
1
4
9
16
25
How to Build a basic Iterator in Python?
Iterators are a fundamental concept in Python, allowing you to traverse through all the elements in a collection, such as lists or tuples. While Python provides built-in iterators, there are times when you might need to create your own custom iterator to handle more complex data structures or operations. In this article, we will explore how to build a basic iterator in Python from scratch.