Bir iterable, döngü yapabileceğiniz herhangi bir şeydir (liste, string, dict); bir iterator, gerçek iterasyonu yapan, tek seferde değerler üreten ve konumunu izleyen nesnedir. Bu ayrım Python'da for döngülerinin nasıl çalıştığını temel alır.
İki protokol
Iterable → has __iter__() → returns an iterator
Iterator → has __next__() → returns the next value (and __iter__ returning itself)
