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