Python programming language has scaled each and every aspect of innovation including Machine Learning, Data Science, Artificial Intelligence, etc. One of the many reasons for this feat is concepts like Python Iterators, concepts like these are the building blocks of Python’s triumph as a programming language. In this article, we will go through the following concepts to understand Python Iterators:
- Iterator vs Iterable
- What Are Python Iterators?
- Custom Iterators
- Infinite Iterators
- StopIteration
- Python Iterator Examples
Iterators vs Iterable
An object in Python, that can be used as an Iterable object is called as Iterable. This basically means the sequence in the object can be iterated upon. Most of the Python collections like a list, dictionary, tuple, sets, and even range can be treated as an Iterable.
What Are Python Iterators?
A Python Iterator is a container containing a countable number of values. Values in a container can be traversed using Iterators – particularly lists.
Apart from traversal, Iterators also gives access to data elements in a container but does not itself perform iteration i.e., not without some significant liberty taken with that concept or with trivial use of the terminology. An Iterator is almost similar to a database cursor in behavior. Here is a simple example of the Iterator in Python.
my_obj = {"Edureka", "Python", "iterator"} iter_obj = iter(my_obj) print(next(iter_obj))
Output: Edureka
Iterator is any type of Python that can be used with a ‘for in loop’. Any object that is to be used as an Iterator must implement the following methods.
1. __iter__()
It is called on the initialization of an Iterator. It should return an object that has a next or __next__ method.
2. __next__()
The Iterator’s next method returns the next value for the Iterable.
When an Iterator is used with a ‘for in’ loop, next() is implicitly called by for loop on the Iterator object. This method should use a StopIteration to signal the end of the iteration. Together these two methods are called the Iterator Protocol. Let us try to understand how a for loop acts as an Iterator in Python with an example.
for i in object: print(i)
Let us understand how for loop works as an Iterator.
# create an iterator object from that iterable iter_obj = iter(iterable) # infinite loop while True: try: # get the next item element = next(iter_obj) # do something with element except StopIteration: # if StopIteration is raised, break from loop break
Now that we know, how the for loop works as an Iterator. Let us understand how we can implement custom Iterators in Python.
Custom Iterators
Now let us take a look at how we can implement custom Iterators in Python. To understand this, we will use an example. In this example, we will implement the __iter__() and __next__() methods.
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter))
Output: 1
2
3
Now that we know how we can implement custom Iterators, let us take a look at infinite Iterators in Python.
Infinite Iterators
It is not always mandatory that the item in an Iterator object has to exhaust. There can be infinite Iterators (which never ends). Here is a basic example to demonstrate infinite iterators.
The built-in function iter() can be called with two arguments where the first argument must be an object (function) that can be called and second is the sentinel. The Iterator calls this function until the returned value becomes equal to the sentinel.
Let us take an example to understand this
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
Output: 1
2
3
4
5
In the above example, the execution will go on as long as we keep on adding the print statement. To stop the infinite Iterators, we need to use the stopIteration statement.
StopIteration
To stop an Iteration from going on forever, we use the StopIteration statement. Let us understand this with a few examples.
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 5: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
Output: 1
2
3
4
5
Now as soon as the if statement condition is false, the execution will move to the else block and the Iteration will stop. Now let’s take a look at a few other examples of Iterators in Python.
Python Iterator Examples
Here are a few more examples of Iterators in Python.
my_obj = ["Edureka", "python", "iterator"] iter_obj = iter(my_obj) print(next(iter_obj))
Output: Edureka
In this example, we use the tuple as the iterable object.
my_obj = ("Edureka", "python", "iterator") iter_obj = iter(my_obj) print(next(iter_obj))
Output: Edureka
We can even use the string as an iterable object in python.
my_obj = "Edureka" iter_obj = iter(my_obj) print(next(iter_obj))
Output: E
This brings us to the end of this article where we have learned how we use the Python Iterators with examples. I hope you are clear with all that has been shared with you in this tutorial.
If you found this article on “Python Iterators” relevant, check out Edureka’s Python Programming Certification Course a trusted online learning company with a network of more than 250,000 satisfied learners spread across the globe.
We are here to help you with every step on your journey and come up with a curriculum that is designed for students and professionals who want to be a Python developer. The course is designed to give you a head start into Python programming and train you for both core and advanced Python concepts along with various Python frameworks like Django.
If you come across any questions, feel free to ask all your questions in the comments section of “Python Iterators”. Our team will be glad to answer.