Для готового кортежа достаточно iterator = iter(values). Он возвращает элементы по очереди через next() и после последнего поднимает StopIteration; сам кортеж при этом не изменяется.
Создать итератор из кортежа
Для готового кортежа достаточно iterator = iter(values). Он возвращает элементы по очереди через next() и после последнего поднимает StopIteration; сам кортеж при этом не изменяется.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан кортеж. Необходимо реализовать объект‑итератор, который позволит последовательно проходить по элементам этого кортежа.
Ответ
Для готового кортежа достаточно iterator = iter(values). Он возвращает элементы по очереди через next() и после последнего поднимает StopIteration; сам кортеж при этом не изменяется.
Если требуется собственный класс, реализуйте протокол:
class TupleIterator:
def __init__(self, values):
self.values = values
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.values):
raise StopIteration
value = self.values[self.index]
self.index += 1
return value
Каждый экземпляр имеет свой курсор. iter(iterator) возвращает тот же объект и не начинает обход заново. Для нового обхода нужен новый итератор. Пустой кортеж сразу исчерпан.