Найти в Дзене
programmer's notes (python and more)

Основы программирования на языке Python. Итерируемые объекты в Python. Приложение к уроку 27

Доброго времени суток, читатели, зрители моего канала programmer's notes.

Приложение к видео-уроку 27

Итерируемые объекты в языке Python

Что такое итерируемый объект? Ну, во-первых, это объект, который состоит из нескольких элементов. Во-вторых, это объект, все элементы которого можно получить используя известную конструкцию перебора элементов коллекции, как это показано ниже, и как мы неоднократно поступали при решении разных задачек.

primer76.py, текст ниже
primer76.py, текст ниже
primer76.py

В программе последовательно выводятся все элементы списка. Но также можно получить элементы и других коллекций. К одним коллекциям можно получить доступ через индексы, к другим нельзя (множества), описанный выше способ будет работать всегда. И так, первый тип итерируемых объектов это коллекции.

Ко второму типу итерируемых объектов относится объект, создаваемый функцией range(), которой мы неоднократно пользовались для получения целых последовательностей в циклах (см. ниже).

primer77.py, текст ниже
primer77.py, текст ниже
primer77.py

Особенность этого объекта заключается в том, что как и в случае с коллекциями, можно определить количество элементов (функция len()). Кроме того, можно получить доступ к элементам при помощи индекса (см. программу выше).

Результат выполнения программы

9
1
2
3
4
5
6
7
8
9
6

Тогда может считать range() коллекцией? Нет. Коллекции хранят свои элементы в памяти, а range() нет. В памяти хранятся только параметры и алгоритм получения. Представьте себе, такой диапазон:

range(1, 1000000000000000, 1)

range() памяти практически никакой не требует, а вот если вы захотите список таких размеров, то это будет проблема.

Ну и наконец переходим к третьей группе итерируемых объектов, это итераторы. Итератор можно получить, например, из списка с помощью функции iter(). Обратное преобразование делается известной уже вами функцией list().

primer78.py, текст ниже
primer78.py, текст ниже
primer78.py

Результат выполнения программы

1
3
2
8
9
[]

И вот тут важно осмыслить результат. Дело в том, что обращение к элементу итераторы приводит к его удалению. А поскольку мы вывели все элементы, то в итераторе не осталось элементов.

К элементам итератора можно обращаться с помощью функции next() - получение следующего элемента. Рассмотрим следующий фрагмент

ls = [1, 3, 2, 8, 9]
it = iter(ls)
print(next(it))
print(next(it))
print(list(it))

Результат выполнения его

1
3
[2, 8, 9]

С помощью функции next() мы получили два первых элемента и, соответственно, эти элементы были удалены.

Польза от итераторов следующая. Создать объект итератор можно самому в программе используя средства объектно-ориентированного программирования. Тем самым мы можем получить последовательность с произвольным количеством элементов, задействовав минимальным объем памяти. Но это совсем другая история, о которой мы расскажем в другом курсе по программированию на языке Python.

Пока все. Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Стихоплетство. Люблю вот такие двустишия, своего рода русские лимерики. Присоединяйтесь. "Пришел в восторг ты от Питона? А завтра ты лишен Айфона." "Вчера писал ты на Паскале, а завтра с должности прогнали." "Программу написал на Аде, а завтра весь ты в шоколаде." "С утра ты учишь SQL, а ночью варишь вермишель." "Сегодня ты крутой программер, а завтра  ты последний спамер".
Стихоплетство. Люблю вот такие двустишия, своего рода русские лимерики. Присоединяйтесь. "Пришел в восторг ты от Питона? А завтра ты лишен Айфона." "Вчера писал ты на Паскале, а завтра с должности прогнали." "Программу написал на Аде, а завтра весь ты в шоколаде." "С утра ты учишь SQL, а ночью варишь вермишель." "Сегодня ты крутой программер, а завтра ты последний спамер".