Итерация в Python

Содержание
Введение
Iteration Protocols
Итераторы и итерируемые объекты
Пример
StopIteration
Похожие статьи

Введение

Итерация в программировании — в широком смысле — организация обработки данных, при которой действия повторяются многократно, не приводя при этом к вызовам самих себя (в отличие от рекурсии).

В узком смысле — один шаг итерационного, циклического процесса.

Когда какое-то действие необходимо повторить большое количество раз, в программировании используются циклы.

Например, нужно вывести 200 раз на экран текст «Hello, World!».

Вместо двухсоткратного повторения одной и той же команды вывода текста часто создается цикл , который повторяется 200 раз и 200 раз выполняет то, что написано в теле цикла.

Iteration Protocols

Iteration Protocols
iterable iterator
Итерируемый объект - то есть объект, который может быть превращён в итератор Итератор - то есть объект по которому возможна итерация
Может быть передан в iter() чтобы создать iterator Может быть передан в next() чтобы получить следующее значение в последовательности

Итераторы и итерируемые объекты

Итерируемый объект (iterable) это такой объект, из которого можно сделать итератор (iterator), применив к нему функцию iter().

Итератор (iterator) это объект, который можно передать в функцию next() чтобы получить следующий элемент последовательности (sequence)

iter(iterable) → iterator

next(iterator)

Пример

Хороший пример итерируемого объекта - это список . Попробуем получать из него элементы по одному.

iterable = ['Benalmadena', 'Cordoba', 'Fuengirola', 'Malaga'] print(type(iterable)) print(next(iterable))

python iterable_ex.py

<class 'list'> Traceback (most recent call last): File "/home/andrei/iterable_ex.py", line 2, in <module> print(next(iterable)) TypeError: 'list' object is not an iterator

Как видите, класс list не позволяет напрямую итерировать по его элементам.

Воспользуемся функцией iter()

iterable = ['Benalmadena', 'Cordoba', 'Fuengirola', 'Malaga'] iterator = iter(iterable) print(next(iterator)) print(next(iterator)) print(next(iterator)) print(next(iterator)) print(next(iterator))

python iterable_ex.py

Benalmadena Cordoba Fuengirola Malaga Traceback (most recent call last): File "/home/andrei/iterable_ex.py", line 7, in <module> print(next(iterator)) StopIteration

После применения iter() мы смогли итерировать по списку до тех пор, пока его элементы не кончились.

Banner image

def city(iterable): iterator = iter(iterable) try: return next(iterator) except StopIteration: raise ValueError("iterable is empty") # List print(city(["Benalmadena", "Cordoba", "Fuengirola", "Malaga"])) print(city(["Benalmadena", "Cordoba", "Fuengirola", "Malaga"])) # Set print(city({"Benalmadena", "Cordoba", "Fuengirola", "Malaga"})) print(city({"Benalmadena", "Cordoba", "Fuengirola", "Malaga"}))

python iterable_ex.py

Benalmadena Benalmadena Fuengirola Fuengirola

set не гарантирует порядок, поэтому вместо Fuengirola может быть любой город.

StopIteration

Пройдёмся по всему итератору и обработаем исключение StopIteration

cities = ['Benalmadena', 'Cordoba', 'Fuengirola', 'Malaga'] g = iter(cities) while True: try: print(next(g)) except StopIteration: raise ValueError("iterable is empty") finally: print("Printing!") print("Great Success!") # will not be printed

python iterable_ex2.py

Benalmadena Printing! Cordoba Printing! Fuengirola Printing! Malaga Printing! Printing! Traceback (most recent call last): File "/home/andrei/iterable_ex2.py", line 21, in <module> print(next(g)) StopIteration During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/andrei/iterable_ex2.py", line 23, in <module> raise ValueError("iterable is empty") ValueError: iterable is empty

Article author: Andrei Olegovich

Похожие статьи
Built-in Collections
Python
Протоколы
Генераторы

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: