Python iterator get item

№20 Итераторы Python / Уроки по Python для начинающих

List, tuple, dict и sets — это все итерируемые объекты. Они являются итерируемыми контейнерами, из которых вы можете получить итератор. Все эти объекты имеют метод iter() , который используется для получения итератора.
Получим итератор из кортежа и выведем каждое значение:

mytuple = ("яблоко", "банан", "вишня") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit)) 

Даже строки являются итерируемыми объектами и могут возвращать итератор.

mystr = "банан" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) 

Цикл через итератор

Мы также можем использовать цикл for для итерации по итерируему объект.

mytuple = ("яблоко", "банан", "вишня") for x in mytuple: print(x) 

Итерируйем символы строки:

mystr = "банан" for x in mystr: print(x) 

Цикл for фактически создает объект итератора и выполняет метод next() для каждого цикла.

Создание итератора

Чтобы создать объект/класс в качестве итератора, вам необходимо реализовать методы __iter__() и __next__() для объекта.

Как вы узнали из урока «Классы и объекты Python», у всех классов есть функция под названием __init__() , которая позволяет вам делать инициализацию при создании объекта.

Метод __iter__() действует аналогично, вы можете выполнять операции (инициализацию и т. Д.), Но всегда должны возвращать сам объект итератора. Метод __next __ () также позволяет вам выполнять операции и должен возвращать следующий элемент в последовательности.

Создайте итератор, который возвращает числа, начиная с 1, и увеличивает на единицу (возвращая 1,2,3,4,5 и т. д.):

class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) 

StopIteration

Приведенный выше пример будет продолжаться вечно, пока вы вызываете оператор next() или если используете в цикле for . Чтобы итерация не продолжалась вечно, мы можем использовать оператор StopIteration .

В метод __next __() мы можем добавить условие завершения, чтобы вызвать ошибку, если итерация выполняется указанное количество раз:

class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a  20: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x) 

Источник

Читайте также:  Console log php to application
Оцените статью