Функция iter() в Python возвращает итератор для данного аргумента.
Содержание
Синтаксис
|
1 |
iter(object, sentinel) |
Параметры
- Object: это объект, итератор которого должен быть создан (набор, кортеж, список, словарь и т. д.).
- Sentinel (необязательно) — это специальное значение, используемое для представления конца последовательности.
Возвращаемое значение
Метод iter() возвращает:
- объект итератора для данного аргумента, пока не будет найден символ-страж.
- TypeError для определяемого пользователем объекта, который не реализует __iter__() и __next__() или __getitem()__
Пример 1: как использовать метод Python iter()
|
1 2 3 4 5 6 |
data = iter(['millie', 'finn', 'gaten', 'caleb']) print(next(data)) print(next(data)) print(next(data)) print(next(data)) |
Мы передали список функции iter() в приведенном выше коде и распечатали элемент с помощью функции next().
Пример 2: использование пользовательского объекта
Определите пользовательский объект, а затем выполните итерацию этого объекта с помощью функции next().
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
class Display: def __init__(self, count): self.count = count def __iter__(self): self.data = 0 return self def __next__(self): if(self.data >= self.count): raise StopIteration self.data += 1 return self.data num = Display(2) printData = iter(num) # prints '1' print(next(printData)) # prints '2' print(next(printData)) # raises StopIteration print(next(printData)) |
Выход
|
1 2 3 4 5 6 7 8 |
1 2 Traceback(most recent call last): File "app.py", line 26, in <module> print(next(printData)) File "app.py", line 11, in __next__ raise StopIteration StopIteration |
Итерация — это общий термин для обозначения чего-либо одного за другим для каждого элемента. Так, например, каждый раз, когда вы используете явный или неявный цикл для просмотра группы элементов, это итерация.
Пример 3: Python iter() с параметром Sentinel
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class HelloBro: def __init__(self): self.start = 1 def __iter__(self): return self def __next__(self): self.start *= 2 return self.start __call__ = __next__ main_iter = iter(HelloBro(), 16) for x in main_iter: print(x) |
