Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение к видео-уроку 27
Итерируемые объекты в языке Python
Что такое итерируемый объект? Ну, во-первых, это объект, который состоит из нескольких элементов. Во-вторых, это объект, все элементы которого можно получить используя известную конструкцию перебора элементов коллекции, как это показано ниже, и как мы неоднократно поступали при решении разных задачек.
В программе последовательно выводятся все элементы списка. Но также можно получить элементы и других коллекций. К одним коллекциям можно получить доступ через индексы, к другим нельзя (множества), описанный выше способ будет работать всегда. И так, первый тип итерируемых объектов это коллекции.
Ко второму типу итерируемых объектов относится объект, создаваемый функцией range(), которой мы неоднократно пользовались для получения целых последовательностей в циклах (см. ниже).
Особенность этого объекта заключается в том, что как и в случае с коллекциями, можно определить количество элементов (функция len()). Кроме того, можно получить доступ к элементам при помощи индекса (см. программу выше).
Результат выполнения программы
9
1
2
3
4
5
6
7
8
9
6
Тогда может считать range() коллекцией? Нет. Коллекции хранят свои элементы в памяти, а range() нет. В памяти хранятся только параметры и алгоритм получения. Представьте себе, такой диапазон:
range(1, 1000000000000000, 1)
range() памяти практически никакой не требует, а вот если вы захотите список таких размеров, то это будет проблема.
Ну и наконец переходим к третьей группе итерируемых объектов, это итераторы. Итератор можно получить, например, из списка с помощью функции iter(). Обратное преобразование делается известной уже вами функцией list().
Результат выполнения программы
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.