Python итератор
- Предыдущая страница Инheritance в Python
- Следующая страница Область видимости Python
Python итератор
Итератор является объектом, который содержит счетчик значений.
Итератор является итерируемым объектом, что означает, что можно итерировать все значения.
Технически в Python, итератор является объектом, реализующим протокол итератора, который содержит методы __iter__()
и __next__
.
Итератор VS Итерируемый объект (Iterable)
список, кортеж, словарь и множество являются итерируемыми объектами. Они итерируемые контейнеры, из которых можно получить итератор (Iterator).
Все эти объекты имеют метод для получения итератора iter()
Метод:
Пример
Возвратить из кортежа итератор и напечатать каждый значений:
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
Даже строка является итерируемым объектом и может возвращать итератор:
Пример
Строка также является итерируемым объектом, которая содержит ряд символов:
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
Итерация по итератору
Мы также можем использовать цикл for для итерации по итерируемому объекту:
Пример
Итерировать значения кортежа:
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
Пример
Итерировать символы строки:
mystr = "banana" for x in mystr: print(x)
Совет:Цикл for на самом деле создает объект итератора и выполняет его для каждого выполнения цикла next
метод.
создание итератора
Чтобы создать объект/класс в качестве итератора, необходимо реализовать метод __iter__()
и __next__
метод.
Как вы узнали в главе о классах/объектах Python, все классы имеют метод с именем __init__()
Функция, которая позволяет выполнить一些 инициализации при создании объекта.
__iter__()
Метод выполняет аналогичную функцию, вы можете выполнять действия (инициализацию и т.д.), но всегда должны возвращать объект итератора.
__next__
Метод также позволяет выполнять действия и должен возвращать следующий элемент из последовательности.
Пример
Создайте итератор, который возвращает числа, начинающиеся с 1, и каждый следующий элемент увеличивается на 1 (возврат 1, 2, 3, 4, 5 и т.д.):
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
StopIteration
Если у вас есть достаточный next
утверждение, или использовать его в цикле for, то в примере итерация будет продолжаться бесконечно.
Чтобы предотвратить бесконечное итерирование, мы можем использовать StopIteration
утверждение.
в __next__
В методе, если итерация завершена指定的 количество раз, мы можем добавить终止ное условие для вызова ошибки:
Пример
Остановиться после 20 итераций:
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 20: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
- Предыдущая страница Инheritance в Python
- Следующая страница Область видимости Python