Искать
Вы превысили запрос на
0 знаков

44. Итераторы в Python

Не пройден
0
0

Кратко

- Итераторы в Python - объекты, возвращающие один элемент за раз.

- Цикл for в Python работает с итераторами, перебирая значения итерируемого объекта.

- Для получения итератора из объекта используется функция iter().

- Итераторы полезны для работы с файлами: они возвращают одну строку за раз, сохраняя ее в память, а не весь файл.

- В следующем уроке будут рассмотрены списковые включения и генераторы списков в Python.

В этом цикле уроков разберемся с итераторами в Python. На самом деле, в ходе предыдущих уроков по Python мы неоднократно встречались с итераторами. Самый простой пример использования итераторов – в цикле for. С ним вы познакомились ранее.

Итератор – это объект, который возвращает за один раз, один свой элемент. Каждый вызов итератора возвращает следующий элемент коллекции. Если следующего элемента нет, то будет брошено исключение (про исключение в Python подробно говорили в уроке про обработку исключений).

Как мы говорили ранее, цикл for может перебирать значения любого итерируемого объекта (список, строка и т.д.). Если выражаться более точно, для интерпретатора Python любой объект имеющий метод __iter__, является итерируемым. Вернемся к циклу for. При каждой итерации цикла происходит обращение к итератору, содержащемуся в обрабатываемом объекте. Если следующего элемента нет, то выбрасывается исключение StopIteration (которое незаметно для пользователя) и цикл заканчивает работу.

Напишем простой пример:

Пример (python)
l = [1, 2, 3, 4, 5]

for item in l:
    print(item) 

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

Пример (python)
it = iter(l)
print(type(it)) # => <class 'list_iterator'> 

Теперь в переменной it хранится итератор. Так же, как мы видим, итератор принадлежит типу list_iterator. Чтобы получить следующее значение объекта, используем функцию next():

Пример (python)
l = [1, 2, 3, 4, 5]

it = iter(l)
print(next(it)) # => 1
print(next(it)) # => 2
print(next(it)) # => 3
print(next(it)) # => 4
print(next(it)) # => 5
print(next(it)) # => StopIteration 

Таким образом, мы реализовали ручной цикл for на итераторах. Ради интереса, сделаем цикл for на основе while и итераторов:

Пример (python)
l = [1, 2, 3, 4, 5]

it = iter(l)
next_element = True
while next_element:
    try:
        print(next(it))
    except StopIteration:
        next_element = False 

Еще одна интересная особенность итераторов в Python: итератор от итератора вернет тот же итератор. Гораздо понятнее будет на примере:

Пример (python)
l = [1, 2, 3, 4, 5]

it = iter(l)
it_2 = iter(it)

print(next(it)) # => 1
print(next(it_2)) # => 2 

Итераторы очень полезны в отношении файлов. Так как каждый вызов итератора возвращает один элемент (в случае с файлами - строка), то в памяти будет находиться лишь одна строка, а не весь файл.

В этом уроке мы более подробно познакомились с итераторами и узнали об особенностях работы с ними. Так же создали аналог цикла for на основе цикла while. В следующем уроке поговорим о труднопереводимых на русский язык понятиях: listdict и set comprehensions (списковые включения или генераторы списков).

Тест

Две секундочки...

Похожие уроки Codebra

@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Генераторы и оператор yield в PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Написание модулей в PythonЗнакомство с Python
Итоги раздела «Структуры данных в Python»Знакомство с Python
Типы данных в PythonЗнакомство с Python
Еще о возможностях модулей в PythonЗнакомство с Python
Условная инструкция if-elif-else в PythonЗнакомство с Python
Введение в раздел «Структуры данных в Python»Знакомство с Python
Первое знакомство с PythonЗнакомство с Python
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию и компьютерной безопасности. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Пентесту Active Directory, Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

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

Удачи в обучении!

Закрыть окно