Despite reading up on it, I still dont quite understand how __iter__ works. What would be a simple explaination?
I\'ve seen def__iter__(self): retu
The specs for def __iter__(self): are: it returns an iterator. So, if self is an iterator, return self is clearly appropriate.
"Being an iterator" means "having a __next__(self) method" (in Python 3; in Python 2, the name of the method in question is unfortunately plain next instead, clearly a name design glitch for a special method).
In Python 2.6 and higher, the best way to implement an iterator is generally to use the appropriate abstract base class from the collections standard library module -- in Python 2.6, the code might be (remember to call the method __next__ instead in Python 3):
import collections
class infinite23s(collections.Iterator):
def next(self): return 23
an instance of this class will return infinitely many copies of 23 when iterated on (like itertools.repeat(23)) so the loop must be terminated otherwise. The point is that subclassing collections.Iterator adds the right __iter__ method on your behalf -- not a big deal here, but a good general principle (avoid repetitive, boilerplate code like iterators' standard one-line __iter__ -- in repetition, there's no added value and a lot of subtracted value!-).