Ett iterable är något du kan loopa över (en list, sträng, dict); en iterator är objektet som utför själva iterationen, producerar värden ett i taget och spårar sin position. Denna distinktion ligger till grund för hur for-loopar fungerar i Python.
De två protokollen
Iterable → has __iter__() → returns an iterator
Iterator → has __next__() → returns the next value (and __iter__ returning itself)
