Ітератори в Python

 5761

Ітератори – це методи, які виконують ітерацію колекцій, таких як списки, кортежі тощо. Використовуючи ітератор, ми можемо перебирати об’єкти та повертати їх елементи. Технічно, об’єкт ітератора в Python повинен визначати два спеціальні методи, __iter__() і __next__(), які в сукупності називаються протоколом ітератора.

Наприклад, функція iter() повертає ітератор заданого об’єкта:

Аргументом функції iter() повинен бути будь-який об’єкт, який підтримує протокол ітерації чи послідовності. Коли ми викликаємо функцію iter() для певного об’єкта, функція спочатку шукає метод __iter__() цього об’єкта.

   Якщо метод __iter__() існує, функція iter() викликає його для отримання ітератора. В протилежному випадку функція iter() шукає метод __getitem__().

   Якщо метод __getitem__() існує, функція iter() створює об’єкт ітератора і повертає його. Якщо цей метод не існує, то генерується виняток TypeError.

Використання ітераторів в Python

В Python ми можемо використовувати функцію next() для повернення наступного елемента у послідовності. Наприклад:

Результат:

4
7
0

Тут ми спочатку створили ітератор зі списку за допомогою функції iter(). Потім використали функцію next() для отримання елементів ітератора в послідовному порядку. Коли ми дійдемо до кінця і більше не буде даних для повернення, згенерується виняток StopIteration.

Автоматична ітерація

Елегантніший спосіб виконання автоматичної ітерації — використання циклу for. Наприклад:

Результат:

4
7
0

Ітератори та цикл for

Цикл for в Python використовується для ітерації по послідовності елементів, таких як список, кортеж або рядок. Коли ми використовуємо цикл for з ітератором, цикл автоматично перебиратиме елементи ітератора до тих пір, поки вони не закінчаться. Наприклад:

Результат:

1
2
3
4
5

Цикл for виконує ітерацію по елементах об’єкта iterator. На кожній ітерації цикл присвоює значення наступного елемента змінній element, а потім виводить її на екран. Цей процес триває доти, доки в ітераторі не закінчаться елементи.

Створення користувацьких ітераторів в Python

Створити ітератор з нуля у Python дуже просто. Для цього потрібно визначити методи __iter__() та __next__():

   __iter__() — повертає сам об’єкт ітератора. За потреби можна виконати ініціалізацію.

   __next__() — повертає наступний елемент у послідовності. Після досягнення кінця та при наступних викликах (після кінця) генерується виняток StopIteration.

Розглянемо приклад програми піднесення значень до степеня на кожній ітерації. Показник степеня починається з нуля до встановленого користувачем числа.

Результат:

1
2
4
8
Traceback (most recent call last):
File "", line 32, in
File "", line 18, in __next__
StopIteration

Ми також можемо використовувати цикл for для ітерації по нашому класу:

Результат:

1
2
4
8

Нескінченні ітератори в Python

Нескінченний ітератор – це ітератор, який ніколи не закінчується. Це означає, що він продовжуватиме створювати елементи необмежену кількість разів.

Ось приклад створення нескінченного ітератора в Python за допомогою функції count() з модуля itertools:

Результат:

1
2
3
4
5

Тут ми створили нескінченний ітератор, який починається з 1 і щоразу збільшується на 1. А потім ми вивели перші 5 елементів нескінченного ітератора за допомогою циклу for та функції next().

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (12 оцінок, середня: 5,00 з 5)
Завантаження...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *