iterator в Python — это объект, который реализует протокол итератора, состоящий из методов __iter__() и __next__().
Итераторы перебирают коллекцию элементов, таких как списки, кортежи, словари или множества, по одному элементу за раз. Они позволяют вам перемещаться по коллекции с эффективным использованием памяти, потому что они не загружают все элементы в память сразу, а генерируют каждый элемент, когда вы его запрашиваете.
Вы можете создать iterator из итерируемого объекта (например, списков, кортежей, словарей, наборов или строк), используя встроенную функцию iter(). Чтобы получить следующий элемент из итератора, используйте встроенную функцию next(). Когда не осталось элементов для возврата, итератор вызывает исключение StopIteration.
Пример iterator в Python
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
main_list = [1, 2, 3, 4] # Create an iterator object from the list main_iterator = iter(main_list) # Iterate over the elements using the iterator print(next(main_iterator)) print(next(main_iterator)) print(next(main_iterator)) print(next(main_iterator)) # Raises StopIteration exception print(next(main_iterator)) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 |
1 2 3 4 Traceback(most recent call last): File "/Users/krunallathiya/Desktop/Code/pythonenv/env/app.py", line 13, in <module> print(next(main_iterator)) StopIteration |
Вы также можете перебрать итерируемый объект, используя цикл for, который автоматически создает и обрабатывает итератор для вас:
|
1 2 3 4 5 |
main_list = [1, 2, 3, 4] # The for loop automatically creates and uses an iterator to loop over for item in main_list: print(item) |
Выход
|
1 2 3 4 5 |
1 2 3 4 |
Чтобы создать собственный итератор, вы можете определить класс, реализующий методы __iter__() и __next__():
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class MyRange: def __init__(self, start, end): self.start = start self.end = end def __iter__(self): return self def __next__(self): if self.start >= self.end: raise StopIteration else: current = self.start self.start += 1 return current # Create a custom iterator that generates numbers from 1 to 4 main_range = MyRange(1, 5) # Iterate over the numbers using a for loop for number in main_range: print(number) |
Выход
|
1 2 3 4 5 |
1 2 3 4 |
В этом примере показано создание пользовательского итератора в Python, генерирующего числа в указанном диапазоне.
