Итерация в 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() мы смогли итерировать по списку до тех пор, пока его элементы не кончились.

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

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

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

IT

Образование

Актуально сейчас

Разное

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: