Что такое итератор
Что такое итератор?
Итератор - это объект со магическим методом "__next__" для перебора значений по очереди. Когда мы делаем так:
numbers = [1, 2, 3, 4, 5]
for number in numbers:
‧‧‧‧print(number)
Мы перебираем (итерируем) значения списка. Иногда бывает очень полезно реализовать в коде обработку каких-либо данных именно перебором.
На сайте RealPython есть хороший пример:
class SquareIterator:
‧‧‧‧def __init__(self, sequence):
‧‧‧‧‧‧‧‧self._sequence = sequence
‧‧‧‧‧‧‧‧self._index = 0
‧‧‧‧def __iter__(self):
‧‧‧‧‧‧‧‧return self
‧‧‧‧def __next__(self):
‧‧‧‧‧‧‧‧if self._index < len(self._sequence):
‧‧‧‧‧‧‧‧‧‧‧‧square = self._sequence[self._index] ** 2
‧‧‧‧‧‧‧‧‧‧‧‧self._index += 1
‧‧‧‧‧‧‧‧‧‧‧‧return square
‧‧‧‧‧‧‧‧else:
‧‧‧‧‧‧‧‧‧‧‧‧raise StopIteration
for square in SquareIterator([1, 2, 3, 4, 5]):
‧‧‧‧print(square)
>>>1
>>>4
>>>9
>>>16
>>>25
Зачем нужен __iter__, когда есть __next__?
Так же, как у классов есть функция под названием __init__, предназначенная для инициализацию объекта, у итератора есть __iter__, в котором можно выполнить операции инициализации нужных данных и обязательно нужно вернуть объект итератора. В приведенном примере класс в методе __iter__ возвращает сам себя и затем перебирает значения по __next__.
#сериал101, #32
Это кросспост из моего Telegram-канала "Не Ван Россум", где я прямо сейчас пишу сериал "101 вопрос про Python" с описанием подводных камней, неочевидностей и загвоздок.