Iterators and Generators
Iterators
An iterator is an object that can be iterated.
Iterator return only one element at a time.
Iteator has 2 special methods:
1.__iter__()
Returns the iterator object
2.__next__()
Returns the current item.
Move to the next iteration.
Example
L=iter([10,20]) #iter()
#print(L.__next__())
print(next(L))
print(next(L))
print(next(L)) #stopIteration Error
Example2
Make an iterator of 2 power values upto 5
(2^0 2^1 2^2 2^3 2^4 2^5)
class PowerTwo:
def __init__(self,max):
self.max=max
def __iter__(self):
self.n=0
return self
def __next__(self):
if self.n<=self.max: #0<=5 1<=5 2<=5 ...5<=5 6<=5
result=2**self.n #2^0 2^1 2^2 2^5
self.n=self.n+1
return result
else:
raise StopIteration
def iter(self):
return self.__iter__()
def next(self):
return self.__next__()
obj=iter(PowerTwo(5))
#print(obj.__next__())
print(obj.next())
print(obj.next())
print(obj.next())
print(obj.next())
print(obj.next())
print(obj.next())
print("Using for loop, ")
for i in obj:
print(i)
Example2
"""
Make an iterator that returns even numbers from 0 to 10
"""
class Evens:
max=None
n=None
def __init__(self,max):
self.max=max
def __iter__(self):
self.n=0
return self
def __next__(self):
if self.n<=self.max:
if self.n%2==0:
result=self.n
self.n=self.n+1
return result
else:
self.n=self.n+1
return ""
else:
raise StopIteration
def iter(self):
return self.__iter__()
def next(self):
return self.__next__()
for i in Evens(10):
print(i)
Generators
Generator is an alternative to iterator.
No need to write iter() and next() implementation while using generator.
It has one or more yield statement which returns value from generators.
Advantages
- Easy to implement compared to iterators.
- Genearators are memory efficient.
- These are excellent medium to represent infinite stream of data.
#Generator generating powers of 2 upto 5
def powTwo(max):
n=0
while n<=max:
yield 2**n
n=n+1
i=iter(powTwo(5))
print(next(i))
print(next(i))
print(next(i))
print(next(i))
print(next(i))
print(next(i))
print("Using for loop,")
for item in powTwo(5):
print(item)
Comments
Post a Comment