Итератор нужен для доступа к объектам без раскрытия внутреннего предоставления. Существует два вида итераторов: внешний,внутренний. Внешний итератор — когда процессом обхода управляет клиент, с помощью магического метода __next__. Внутренний итератор — принимает callback функции и уведомляет клиента о получение следующего элемента. Сам итератор это объект, который возвращает свои элементы по одному разу. В Python это любой объект у которого есть магический метод __next__. Метод возвращает следующий элемент, если он существует, в другом случаи вернет StopIteration. Так-же у каждого итератора должна быть метод __iter__, он возвращает сам итератор. Интерфейса итератора состоит из first,next,current. first — возвращает итератор к началу агрегата,что-то вроде reset. next — переходит на следующий элемент агрегата, в случаи если нет следующего элемента, то будет StopIteration. current — возвращает текущий элемент. Создадим итератор, который возвращает числа, начиная с 1, и каждая следующая