logo

Ітератори в Python

Ітератор у Python — це об’єкт, який використовується для повторення об’єктів, які можна ітерувати, наприклад списків, кортежів, dicts і наборів. Об'єкт ітераторів Python ініціалізується за допомогою iter() метод. Він використовує наступний() метод для ітерації.

    __iter__(): метод iter() викликається для ініціалізації ітератора. Це повертає об’єкт ітератора __next__(): метод next повертає наступне значення для ітерованого. Коли ми використовуємо цикл for для обходу будь-якого ітерованого об’єкта, внутрішньо він використовує метод iter() для отримання об’єкта ітератора, який далі використовує метод next() для повторення. Цей метод викликає StopIteration, щоб сигналізувати про кінець ітерації.

Приклад Python iter().

Python3








string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))>



>

>

Вихід:

G F G>

Створення та цикл над ітератором за допомогою iter() і next()

Нижче наведено простий ітератор Python, який створює тип ітератора, який повторює від 10 до заданого ліміту. Наприклад, якщо обмеження дорівнює 15, то він друкує 10 11 12 13 14 15. А якщо обмеження дорівнює 5, то він нічого не друкує.

Python3


як відобразити додаток на android



як закрити режим розробника

# A simple Python program to demonstrate> # working of iterators using an example type> # that iterates from 10 to given value> # An iterable user defined type> class> Test:> ># Constructor> >def> __init__(>self>, limit):> >self>.limit>=> limit> ># Creates iterator object> ># Called when iteration is initialized> >def> __iter__(>self>):> >self>.x>=> 10> >return> self> ># To move to next element. In Python 3,> ># we should replace next with __next__> >def> __next__(>self>):> ># Store current value ofx> >x>=> self>.x> ># Stop iteration if limit is reached> >if> x>>self>.limit:> >raise> StopIteration> ># Else increment and return old value> >self>.x>=> x>+> 1>;> >return> x> # Prints numbers from 10 to 15> for> i>in> Test(>15>):> >print>(i)> # Prints nothing> for> i>in> Test(>5>):> >print>(i)>

>

>

Вихід:

10 11 12 13 14 15>

Ітерація поверх вбудованого iterable за допомогою методу iter().

У наступних ітераціях стан ітерації та змінна ітератора керуються внутрішньо (ми не бачимо цього) за допомогою об’єкта ітератора для проходу через вбудований ітератор, наприклад список , кортеж , дикт і т.д.

Python3




# Sample built-in iterators> # Iterating over a list> print>(>'List Iteration'>)> l>=> [>'geeks'>,>'for'>,>'geeks'>]> for> i>in> l:> >print>(i)> > # Iterating over a tuple (immutable)> print>(>' Tuple Iteration'>)> t>=> (>'geeks'>,>'for'>,>'geeks'>)> for> i>in> t:> >print>(i)> > # Iterating over a String> print>(>' String Iteration'>)> s>=> 'Geeks'> for> i>in> s :> >print>(i)> > # Iterating over dictionary> print>(>' Dictionary Iteration'>)> d>=> dict>()> d[>'xyz'>]>=> 123> d[>'abc'>]>=> 345> for> i>in> d :> >print>(>'%s %d'> %>(i, d[i]))>

>

>

Вихід:

List Iteration geeks for geeks Tuple Iteration geeks for geeks String Iteration G e e k s Dictionary Iteration xyz 123 abc 345>

Iterable проти Iterator

Python iterable та Python iterator відрізняються. Основна відмінність між ними полягає в тому, що iterable у Python не може зберігати стан ітерації, тоді як в ітераторах зберігається стан поточної ітерації.

Примітка: Кожен ітератор також є ітератором, але не кожен ітератор є ітератором у Python.
Читати далі – Різниця між ітератором та ітератором.

java отримати поточний час

Ітерація на Iterable

Ітерація кожного елемента ітерованого.

Python3




tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)>

>

>

Вихід:

jfx java підручник
a b c d e>

Ітерація на ітераторі

Python3




tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> # creating an iterator from the tuple> tup_iter>=> iter>(tup)> print>(>'Inside loop:'>)> # iterating on each item of the iterator object> for> index, item>in> enumerate>(tup_iter):> >print>(item)> ># break outside loop after iterating on 3 elements> >if> index>=>=> 2>:> >break> # we can print the remaining items to be iterated using next()> # thus, the state was saved> print>(>'Outside loop:'>)> print>(>next>(tup_iter))> print>(>next>(tup_iter))>

>

>

Вихід:

загальність у java
Inside loop: a b c Outside loop: d e>

Отримання помилки StopIteration під час використання ітератора

Iterable у Python можна ітерувати кілька разів, але ітератори викликають StopIteration Error, коли всі елементи вже повторені.

Тут ми намагаємося отримати наступний елемент з ітератора після завершення циклу for. Оскільки ітератор уже вичерпано, він викликає виняток StopIteration. Тоді як, використовуючи iterable, ми можемо повторювати кілька разів за допомогою циклу for або можемо отримувати елементи за допомогою індексування.

Python3




iterable>=> (>1>,>2>,>3>,>4>)> iterator_obj>=> iter>(iterable)> print>(>'Iterable loop 1:'>)> # iterating on iterable> for> item>in> iterable:> >print>(item, end>=>','>)> print>(>' Iterable Loop 2:'>)> for> item>in> iterable:> >print>(item, end>=>','>)> print>(>' Iterating on an iterator:'>)> # iterating on an iterator object multiple times> for> item>in> iterator_obj:> >print>(item, end>=>','>)> print>(>' Iterator: Outside loop'>)> # this line will raise StopIteration Exception> # since all items are iterated in the previous for-loop> print>(>next>(iterator_obj))>

>

>

Вихід:

Iterable loop 1: 1,2,3,4, Iterable Loop 2: 1,2,3,4, Iterating on an iterator: 1,2,3,4, Iterator: Outside loop Traceback (most recent call last): File 'scratch_1.py', line 21, in print(next(iterator_obj)) StopIteration>