Understanding Python’s iterator, iterable, and iteration protocols — what exactly are they? – Stack Overflow