Функция iter() в Python

Создаем итератор с помощью функции iter() в Python

iter() — это встроенная функция в Python, которая возвращает итератор для заданного объекта. Функция используется для обхода элементов коллекций (таких как списки, кортежи, словари) и других объектов, поддерживающих протокол итерации.

Синтаксис

Синтаксис функции iter() следующий:

iter(object[, sentinel])

Здесь:

  • object — объект, для которого необходимо получить итератор. Объект должен быть коллекцией или другим объектом, поддерживающим протокол итерации.
  • sentinel — если указан, то object должен быть вызываемым объектом. Итерация будет продолжаться до тех пор, пока object не вернет значение sentinel.

Получение итератора для коллекций

Для коллекций и других итерируемых объектов функция iter() возвращает итератор, который можно использовать для последовательного доступа к элементам.

my_list = [1, 2, 3, 4]
my_iter = iter(my_list)

print(next(my_iter))  # 1
print(next(my_iter))  # 2
print(next(my_iter))  # 3
print(next(my_iter))  # 4

В этом примере функция next() используется для извлечения следующего элемента из итератора.

Итерация до заданного значения

Если указать второй параметр sentinel, то object должен быть вызываемым объектом. Функция iter() будет вызывать этот объект и продолжать итерацию до тех пор, пока object не вернет значение sentinel.

import random
random_iter = iter(lambda: random.randint(0, 10), 5)

for num in random_iter:
    print(num)

В этом примере iter() будет продолжать вызывать lambda-функцию (которая генерирует случайное число от 0 до 10) до тех пор, пока не будет сгенерировано число 5.

Обработка исключения StopIteration

При достижении конца итерации функция next() вызывает исключение StopIteration. Можно обработать это исключение с помощью конструкции try/except:

my_list = [1, 2, 3, 4]
my_iter = iter(my_list)

while True:
    try:
        print(next(my_iter))
    except StopIteration:
        break

В этом примере, когда итератор достигает конца списка, вызывается исключение StopIteration, которое затем обрабатывается и прерывает цикл while.

Применение iter() в пользовательских объектах

Не только встроенные типы данных в Python могут быть итерируемыми. Вы также можете сделать ваши собственные классы итерируемыми, определив для них методы __iter__() и __next__(). При этом функция iter() будет возвращать объект-итератор для экземпляров вашего класса.

class MyNumbers:
    def __init__(self):
        self.a = 1

    def __iter__(self):
        return self

    def __next__(self):
        x = self.a
        self.a += 1
        return x

my_class = MyNumbers()
my_iter = iter(my_class)

print(next(my_iter))  # 1
print(next(my_iter))  # 2
print(next(my_iter))  # 3

Использование iter() для чтения файлов построчно

Одним из полезных применений функции iter() является построчное чтение файлов. С помощью функции iter() вы можете создать итератор, который будет возвращать строки файла одну за другой, что может быть очень эффективным при работе с большими файлами.

with open('myfile.txt', 'r') as f:
    for line in iter(f.readline, ''):
        print(line)

В этом примере f.readline — это вызываемый объект, который возвращает следующую строку файла при каждом вызове. Пустая строка (») используется в качестве «стража» sentinel — признака конца файла.

Вывод

Функция iter() в Python — это мощный инструмент для работы с итерируемыми объектами. Она позволяет эффективно и удобно обрабатывать коллекции и другие объекты, поддерживающие протокол итерации. Благодаря поддержке вызываемых объектов и возможности задать условие остановки, iter() обеспечивает высокую гибкость при реализации итераций в Python.

Содержание: