Итераторы - это объекты, которые предоставляют последовательный доступ к элементам контейнера (или генерируемым "на лету" объектам). Итератор позволяет перебирать элементы, абстрагируясь от реализации того контейнера, откуда он их берет (если этот контейнер вообще есть).

В следующем примере приведен итератор, выдающий значения из списка по принципу "считалочки" по N:

class Zahlreim: def __init__(self, lst, n): self.n = n self.lst = lst self.current = 0 def __iter__(self): return self def next(self): if self.lst: self.current = (self.current + self.n - 1) % len(self.lst) return self.lst.pop(self.current) else: raise StopIteration

print range(1, 11) for i in Zahlreim(range(1, 11), 5): print i,

Программа выдаст

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5 10 6 2 9 8 1 4 7 3

В этой программе делегировано управление доступом к элементам списка (или любого другого контейнера, имеющего метод pop(n) для взятия и удаления n-го элемента) классу-итератору. Итератор должен иметь метод next() и возбуждать исключение StopIteration по завершении итераций. Кроме того, метод __iter__() должен выдавать итератор по экземпляру класса (в данном случае итератор - он сам (self)).

В настоящее время итераторы приобретают все большее значение, и о них много говорилось в лекции по функциональному программированию.