Python __iter__() and __next__() | Converting an object into an iterator

31 Aug, 2021
At many instances, we get a need to access an object like an iterator. One way is to form a generator loop but that extends the task and time taken by the programmer. Python eases this task by providing a built-in method __iter__() for this task.The __iter__() function returns an iterator for the given object (array, set, tuple, etc. or custom objects). It creates an object that can be accessed one element at a time using __next__() function, which generally comes in handy when dealing with loops.
Syntax : 
iter(object)
iter(callable, sentinel)
Object: The object whose iterator has to be created. It can be a collection object like list or tuple or a user-defined object (using OOPS).
Callable, Sentinel: Callable represents a callable object, and sentinel is the value at which the iteration is needed to be terminated, sentinel value represents the end of sequence being iterated.
Exception :  
If we call the iterator after all the elements have 
been iterated, then StopIterationError is raised.
The __iter__() function returns an iterator object that goes through each element of the given object. The next element can be accessed through __next__() function. In the case of callable object and sentinel value, the iteration is done until the value is found or the end of elements reached. In any case, the original object is not modified.
Code #1 :  
Python3
# Python code demonstrating# basic use of iter()listA = ['a','e','i','o','u'] iter_listA = iter(listA) try:    print( next(iter_listA))    print( next(iter_listA))    print( next(iter_listA))    print( next(iter_listA))    print( next(iter_listA))    print( next(iter_listA)) #StopIteration errorexcept:    pass
Output : 
a
e
i
o
u
Code #2 : 
Python3
# Python code demonstrating# basic use of iter()lst = [11, 22, 33, 44, 55] iter_lst = iter(lst)while True:    try:        print(iter_lst.__next__())    except:        break
Output : 
11
22
33
44
55
Code #3 :  
Python3
# Python code demonstrating# basic use of iter() listB = ['Cat', 'Bat', 'Sat', 'Mat']  iter_listB = listB.__iter__() try:    print(iter_listB.__next__())    print(iter_listB.__next__())    print(iter_listB.__next__())    print(iter_listB.__next__())    print(iter_listB.__next__()) #StopIteration errorexcept:    print(" \nThrowing 'StopIterationError'",                     "I cannot count more.")
Output : 
Cat
Bat
Sat
Mat
 
Throwing 'StopIterationError' I cannot count more.
Code #4 : User-defined objects (using OOPS) 
Python3
# Python code showing use of iter() using OOPs class Counter:    def __init__(self, start, end):        self.num = start        self.end = end     def __iter__(self):        return self     def __next__(self):        if self.num > self.end:            raise StopIteration        else:            self.num += 1            return self.num - 1                          # Driver codeif __name__ == '__main__' :         a, b = 2, 5         c1 = Counter(a, b)    c2 = Counter(a, b)         # Way 1-to print the range without iter()    print ("Print the range without iter()")         for i in c1:        print ("Eating more Pizzas, counting ", i, end ="\n")         print ("\nPrint the range using iter()\n")         # Way 2- using iter()    obj = iter(c2)    try:        while True: # Print till error raised            print ("Eating more Pizzas, counting ", next(obj))    except:        # when StopIteration raised, Print custom message        print ("\nDead on overfood, GAME OVER")
Print the range without iter()
Eating more Pizzas, counting  2
Eating more Pizzas, counting  3
Eating more Pizzas, counting  4
Eating more Pizzas, counting  5

Print the range using iter()

Eating more Pizzas, counting  2
Eating more Pizzas, counting  3
Eating more Pizzas, counting  4
Eating more Pizzas, counting  5

Dead on overfood, GAME OVER
gulshankumarar231
Python-Built-in-functions
Python-Functions
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Read JSON file using Python
Adding new column to existing DataFrame in Pandas
Python map() function
How to get column names in Pandas dataframe
Different ways to create Pandas Dataframe
Taking input in Python
Enumerate() in Python
Read a file line by line in Python
Python String | replace()
How to Install PIP on Windows ?