An iterator in Python serves as a holder for objects so that they can be iterated over,a generator facilitates the creation of a custom iterator.
A generator is always an Iterator but Iterator is not always a generator.
A list is iterable but not an iterator, but if we run dunder iter method(__iter__()) on a list, it returns an iterator.
Any object that has a __next__() method is an iterator.
The following are some main differences between Generator and iterator:
Generator | Iterator |
---|---|
Implemented using a function. | Implemented using a class. |
Uses the yield keyword. |
Does not use the yield keyword. |
Usage results in a concise code. | Usage results in a relatively less concise code. |
All the local variables before the yield statements are stored. |
No local variables are used. |
Remember that a return statement terminates the execution of a function entirely, whereas, the yield statement saves the function state and resumes its execution, from this point, upon subsequent calls.
def my_range(start, end): current = start while current < end: yield current current += 1
Note -Generators are iterators in which __iter__ and __next__ are created automatically by yield keyword.
The __iter__() method returns the iterator object. This is required to allow an iterator to be used with the for and in statements.
The __next__() method returns the next element in the sequence. In the case of a finite iterator, once it reaches the end (defined by the termination condition), all of the subsequent calls to this method should raise an exception.
class MyRange: def __init__(self, start, end): self.value = start self.end = end def __iter__(self): # For something to be iterable, it needs to have __iter__() method return self def __next__(self): # For something to be iterator, it needs to have __next__() method if self.value >= self.end: raise StopIteration current = self.value self.value += 1 return current nums = MyRange(1, 10) for num in nums: print(num)
This article is contributed by Nupur. If you like dEexams.com and would like to contribute, you can write your article here or mail your article to admin@deexams.com . See your article appearing on the dEexams.com main page and help others to learn.