Узнайте, как на самом деле работает цикл for в Python, а также познакомьтесь с итераторами в Python.

Петли. Одна из самых фундаментальных и базовых конструкций любого языка программирования. Цикл, как правило, помогает перебирать последовательность объектов, обращаясь к каждому элементу по одному. Python, как и другие популярные языки программирования, также имеет собственную реализацию циклов и поставляется с циклами While и For Loops и делает более или менее то же самое, что и цикл.

Изучая python, я обнаружил, что в циклах For происходит нечто удивительное, и я подумал, что стоит написать об этом. На первый взгляд может показаться очень тривиальным, что то, что может быть настолько удивительным, происходит внутри цикла for, на самом деле это довольно интересно. В статье пойдет речь о следующем:

  • Итераторы, что это такое и как работают.
  • Фактическая реализация цикла for в Python.

Итераторы в Python

Прежде чем мы продолжим разоблачать цикл «For Loops», нам нужно сначала понять, что такое итераторы, поскольку они играют важную роль в его работе.

Что такое итератор?

В python все является объектом, и, как и любой другой объект в python, итератор также является объектом, но объектом, который может быть повторен и будет возвращать по одному элементу за раз. по звонку.

Итераторы повсюду находят свои реализации в Python. Мы найдем итераторы в составных частях списков, генераторах и, как вы уже догадались, они также реализованы в рамках цикла For Loops.

Как работают итераторы?

Как уже упоминалось, итератор - это объект, который можно повторять. Необходимые условия для создания объекта-итератора - в нем должны быть реализованы два специальных метода.

  • Метод __iter __ (). Этот метод возвращает объект-итератор при вызове итерации.

Итерация - это объект, из которого мы можем получить итератор. Например, список, кортежи, строка.

  • Метод __next __ (). Этот метод возвращает элемент из итерируемого по одному. Он используется для итерации объекта-итератора.

Давайте посмотрим на простой пример кода ниже, чтобы лучше понять итератор.

# a list which is an iterable
numbers = [1,2,3,4,5]
# creating an iterator object from the iterable (numbers)
num_iterator = iter(numbers) # returns an iterator
#Iterating through num_iterator using next() method
print(next(num_iterator)) # output: 1
print(next(num_iterator)) # output: 2
print(next(num_iterator)) # output: 3
print(next(num_iterator)) # output: 4
print(next(num_iterator)) # output: 5
# when no more elements left, exception is raised
print(next(num_iterator)) # StopIteration Exception Raised

Используя метод iter (), мы создали объект-итератор из нашего списка чисел. Затем мы вручную перебираем все элементы нашего итератора, используя метод next (). Как только мы достигаем конца чисел, возникает исключение StopIteration, если мы продолжаем вызывать метод next () на итераторе.

Фактическая реализация цикла For в Python

Теперь, когда у нас есть хорошее представление о том, как работают итераторы в Python, мы можем увидеть, что происходит за кулисами цикла For в Python.

Нужны циклы For?

Из нашего предыдущего фрагмента кода мы можем видеть, что мы вручную перебираем наш список, что может быть довольно беспокойным, учитывая большой список чисел или элементов. Должен быть более элегантный и лучший способ сделать то же самое - с помощью циклов For Loops. Итак, наш предыдущий код можно преобразовать в следующий:

for number in numbers:
    print(number) # output: 1,2,3,4,5

Увидеть всего две строчки и ту же функциональность. Милая.

За кулисами

Теперь взгляните на следующий фрагмент кода

num_iterator = iter(numbers)
while True:
    try:
        # get the next item
        number = next(num_iterator)
    except StopIteration:
        break

Глядя на приведенный выше код, вы можете спросить, почему здесь есть цикл while, когда мы все время говорили о циклах for? То, что вы видите, на самом деле происходит за циклом for. Приведенный выше код представляет собой фактическую реализацию цикла for в Python.

Всякий раз, когда цикл for вызывается для итератора, внутри итератора создается объект-итератор с использованием метода iter (), а бесконечный цикл while используется для итерации значений объекта-итератора с использованием метода next () внутри try / блокировка ловушки. Когда мы достигаем конца элементов в итераторе, возникает исключение StopIteration, и мы выходим из бесконечного цикла.

Таким образом, цикл for - это просто бесконечный цикл while с реализацией итераторов. Иронично.

Резюме

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

Если вам понравилась эта статья, просмотрите другие мои статьи. Помогите мне привлечь 500 подписчиков, подписавшись на меня на Medium, чтобы получать больше такого потрясающего контента. Спасибо.