Ideya
Iterator kolleksiyanın elementlərini onun daxili quruluşunu (massiv, əlaqəli siyahı, ağac, qraf) açmadan ardıcıl verir. Klient yalnız "növbəti element var?" və "onu ver" suallarını verir. Üstünlüklər: bir kolleksiyanı müxtəlif qaydada gəzmək olar, eyni anda bir neçə gəzinti bir-birinə mane olmur, kolleksiyanın içini dəyişsəniz klient kodu dəyişmir.
Python-da protokol
Python-da pattern dilin özünə daxil edilib: iterable __iter__() metodu ilə iterator qaytarır, iterator isə __next__() ilə növbəti elementi verir və bitəndə StopIteration qaldırır. for, list(), sum(), in hamısı bu protokolla işləyir. Ətraflı: iterasiya protokolu.
class Countdown:
def __init__(self, start):
self.current = start
def __iter__(self):
return self
def __next__(self):
if self.current <= 0:
raise StopIteration
self.current -= 1
return self.current + 1
for n in Countdown(3):
print(n)
it = Countdown(2)
print(next(it), next(it))
print(list(it))