logo

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