Exploration of Python generators
Any object that supports iter() i.e.
- implements
__iter__()method, or - supports the sequence protocol i.e.
- implements
__getitem__()method with integer arguments starting at 0.
- implements
is said to be "iterable". iter() returns iterator, so:
iterator = iter(iterable)for x in obj:
# statementscorreponds to
_iter = iter(obj) # get iterator object
while True:
try:
x = _iter.__next__() # get next item
except StopIteration: # no more items
break
# statementsA common pattern is to implement __next__() and __iter__() returning object itself. This way object is its own iterator.