iter(object)

iter(object, sentinel)

Возвращает объект итератора.

Параметры

Функция iter() принимает два параметра:

  • obj — может быть списком, набором, кортежем и т. д. Объект коллекции, поддерживающей итерирование (реализует iter()), либо объект, поддерживающий протокол последовательности (реализует getitem(), где аргумент целое, начиная с нуля). Если передан другой объект, возбуждается TypeError.
  • sentinel необязательный — Если этот аргумент предоставлен, то ожидается, что obj содержит объект, поддерживающий вызов. В этом случае, созданный итератор будет вызывать указанный объект (без аргументов) с каждым обращением к своему next() и проверять полученное значение на равенство с sentinel. Если полученное значение равно sentinel, возбуждается StopIteration, иначе возвращается полученное значение. Функция возвращает итератор по объекту, поддерживающему итерирование по его элементам.

Возвращаемое значение

Функция iter() возвращает:

  • объект итератора для данного аргумента, пока не будет найден сторожевой символ
  • TypeError для определяемого пользователем объекта, который не реализует __iter__() и __next__() или __getitem()__

Примеры

Одно из применений sentinel — чтение строк, пока не будет достигнута нужная. Следующий пример считывает файл, пока метод readline() не вернёт пустую строку:

with open('mydata.txt') as fp:
    for line in iter(fp.readline, ''):
        pass # Делаем что-либо с line.

Пользовательский тип, определивший call():

class MyIterable(object):

    def __init__(self):
        self.index = 0
        self.items = [1, 2, 3, 4]

    def __call__(self):
        value = self.items[self.index]
        self.index += 1
        return value
iterator = iter(MyIterable(), 3)

print(next(iterator))  # 1
print(next(iterator))  # 2
print(next(iterator))  # StopIteration