Итераторы — это объекты, позволяющие последовательно обходить элементы коллекций (списки, кортежи, строки, словари, множества) без раскрытия внутренней структуры. Итератор должен реализовывать два метода:
•	метод __iter__() –  возвращает сам итератор
•	метод __next__() — следующий элемент последовательности или исключение StopIteration, если элементы закончились.

Для создания собственного итератора нужно определить класс, который реализует методы __iter__() и __next__().

Cпособ обхода итераторов — цикл for.

Модуль itertools предоставляет набор инструментов для работы с итераторами: itertools.count(), itertools.cycle(), itertools.repeat(), itertools.chain(), itertools.islice(), itertools.combinations()

Функции-генераторы используют ключевое слово yield для возврата значений по одному. Каждый раз, когда генератору вызывают next(), выполнение функции продолжается с места, на котором она была приостановлена, до следующего yield.

Выражения-генераторы позволяют создавать ленивые итераторы, которые вычисляют значения по мере необходимости.
