An iterable is alles wat je kunt doorlopen (een list, string, dict); an iterator is het object dat de daadwerkelijke iteratie uitvoert, waarden één voor één produceert en de positie bijhoudt. Dit onderscheid vormt de basis van hoe for loops in Python werken.
De twee protocollen
Iterable → has __iter__() → returns an iterator
Iterator → has __next__() → returns the next value (and __iter__ returning itself)
