Что такое цикл for python

Циклы в Python

Что такое цикл for python. Смотреть фото Что такое цикл for python. Смотреть картинку Что такое цикл for python. Картинка про Что такое цикл for python. Фото Что такое цикл for python

Что такое цикл for python. Смотреть фото Что такое цикл for python. Смотреть картинку Что такое цикл for python. Картинка про Что такое цикл for python. Фото Что такое цикл for python

Каждый язык программирования, с которым я сталкивался, содержит какую-нибудь конструкцию цикла. В большей части языков есть больше одной такой конструкции. В мире Python есть два типа циклов:

Я заметил, что цикл for популярнее второго. Циклы используются в тех случаях, когда нам нужно сделать что-нибудь много раз. Нередко вам придется выполнить какую-нибудь операцию (или ряд операций) в части данных снова и снова. Тут то и вступают в силу циклы. Благодаря им становится возможно максимально упростить данный вопрос. Давайте подробно разберём, как работают эти структуры!

Цикл for

Как было сказано ранее, мы используем цикл в тех случаях, когда вам нужно повторить что-нибудь n-ное количество раз. Это проще понять, если взглянуть на пример. Мы используем встроенную функцию Python range. Функция range создаст список длинной в «n» элементов. В Python версии 2.Х существует другая функция под названием xrange, которая является генератором чисел и не такая ресурсоемкая, как range. Ранее разработчики сменили xrange на range в Python 3. Вот пример:

Как вы видите, функция range взяла целое число и вернула объект range. Функция range также принимает начальное значение, конечное значение и значение шага. Вот еще два примера:

В пером примере показано, что вы можете передать начальное и конечное значение, и функция range вернет числа, начиная с начального значения вплоть до (но не включая) последнее значение. Например, при запросе 5-10 мы получим 5-9. Во втором примере видно, как использовать функцию списка (list) для того, чтобы функция range вернула каждый второй элемент, между 1 и 10. Так что она начинает с 1, пропускает 2 и так далее. Теперь вы, наверное, гадаете, что же именно она будет делать с циклами? Что-ж, есть один простой способ показать, как работает цикл с использованием функции range! Давайте взглянем:

Что здесь произошло? Давайте почитаем слева на право, чтобы понять это. Для каждого числа в диапазоне 5 мы вводим число. Мы знаем, что если мы вызываем range со значением 5, мы получим список из 5 элементов. Так что каждый раз, проходя через цикл, она выводит каждый из элементов. Цикл for, показанный выше, может быть эквивалентом следующего:

Функция range лишь делает результат несколько меньшим. Цикл for может обходить любой итератор Python. Мы уже видели, как именно он может работать со списком. Давайте взглянем, может ли он выполнять итерацию со словарем.

Когда вы используете for в словаре, вы увидите, что он автоматически перебирает ключи. Вам не нужно указывать ключ for в a_dict.keys() (впрочем, это также работает). Python делает только нужные нам вещи. Вы возможно думаете, почему ключи выводятся в другом порядке, отличном от того, какой был указан в словаре? Как мы знаем из соответствующей статьи, словари не упорядочены, так что мы можем выполнять итерацию над ними, при этом ключи могут быть в любом порядке. Теперь, зная, что ключи могут быть отсортированы, вы можете отсортировать их до итерации. Давайте немного изменим словарь, чтобы увидеть, как это работает.

Давайте остановимся и разберемся с тем, что делает этот код. Во-первых, мы создали словарь, в котором ключи выступают в качестве целых чисел, вместо строк. Далее, мы извлекли ключи из словаря. Каждый раз, когда вы взываете метод keys(), он возвращает неупорядоченный список ключей. Если вы выведите их, и увидите, что они расположен в порядке по возрастанию, то это просто случайность. Теперь у нас есть доступ к ключам словаря, которые хранятся в переменной, под названием keys. Мы сортируем наш список, после чего используем цикл for в нем. Теперь мы готовы к тому, чтобы сделать все немного интереснее. Мы попробуем применить цикл в функции range, но нам нужно вывести только целые числа. Чтобы сделать это, нам нужно использовать условный оператор вместо параметра шага range. Это можно сделать следующим образом:

Вы наверное гадаете, что вообще здесь происходит? Что еще за знак процента? В Python, % называется оператором модуля. Когда вы используете оператор модуля, он возвращает остаток. Когда вы делите целое число на два, вы получаете число без остатка, так что мы выводим эти числа. Вам, возможно, не захочется использовать оператор модуля часто в будущем, но в моей работе он нередко помогает. Теперь мы можем взглянуть на цикл while.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Цикл while

Цикл while также используется для повторения частей кода, но вместо зацикливания на n количество раз, он выполняет работу до тех пор, пока не достигнет определенного условия. Давайте взглянем на простой пример:

Цикл while является своего рода условным оператором. Вот что значит этот код: пока переменная i меньше единицы, её нужно выводить на экран. Далее, в конце, мы увеличиваем её значение на единицу. Если вы запустите этот код, он выдаст от 0 до 9, каждая цифра будет в отдельной строке, после чего задача будет выполнена. Если вы удалите ту часть, в которой мы увеличиваем значение i, то мы получим бесконечный цикл. Как правило – это плохо. Бесконечные циклы известны как логические ошибки, и их нужно избегать. Существует другой способ вырваться из цикла, для этого нужно использовать встроенную функцию break. Давайте посмотрим, как это работает:

В этой части кода мы добавили условное выражение для проверки того, равняется ли когда-либо переменная i цифре 5. Если нет, тогда мы разрываем цикл. Как вы видите в выдаче кода, как только значение достигает пяти, код останавливается, даже если мы ранее указали while продолжать цикл, пока переменная не достигнет значения 10. Обратите внимание на то, что мы изменили то, как мы увеличиваем значение при помощи +=. Это удобный ярлык, который вы можете также использовать в других операциях, таких как вычитание -= и умножение *=. Встроенный break также известен как инструмент управления потока. Существует еще один, под названием continue, который в основном используется для пропуска итерации, или перейти к следующей итерации. Вот один из способов его применения:

Слегка запутанно, не так ли? Мы добавили второе условное выражение, которое проверяет, не равняется ли i трем. Если да, мы увеличиваем переменную и переходим к следующему циклу, который удачно пропускает вывод значения 3 на экран. Как и ранее, когда мы достигаем значения 5, мы разрываем цикл. Существует еще одна тема, касающаяся циклов, которую нам нужно затронуть – это оператор else.

Зачем нужен else при работе с циклами?

Оператор else в циклах выполняется только в том случае, если цикл выполнен успешно. Главная задача оператора else, это поиск объектов:

В этом коде мы разорвали цикл, когда i равно 3. Это приводит к пропуску оператора else. Если вы хотите провести эксперимент, вы можете изменить условное выражение, чтобы посмотреть на значение, которое находится вне списка, и которое приведет оператор else к выполнению. Честно, ни разу не видел, чтобы кто-либо использовал данную структуру за все годы работы. Большая часть примеров, которые я видел, приведена блогерами, которые пытаются объяснить, как это работает. Я видел несколько людей, которые использовали эту структуру для провоцирования ошибки, когда объект не удается найти в искомом цикле. Вы можете почитать статью, в которой вопрос рассматривается весьма детально. Статья написана одним из разработчиков ядра Python.

Подведем итоги

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

Что такое цикл for python. Смотреть фото Что такое цикл for python. Смотреть картинку Что такое цикл for python. Картинка про Что такое цикл for python. Фото Что такое цикл for python

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: vasile.buldumac@ati.utm.md

Образование
Universitatea Tehnică a Moldovei (utm.md)

Источник

Цикл for

Цикл for в языке программирования Python предназначен для перебора элементов структур данных и некоторых других объектов. Это не цикл со счетчиком, каковым является for во многих других языках.

С английского «for» переводится как «для», «in» как «в». Перевести конструкцию с языка программирования на человеческий можно так: для каждого элемента в списке делать следующее (то, что в теле цикла).

В примере мы увеличивали каждый элемент на 2 и выводили его на экран. При этом сам список конечно же не изменялся:

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

Функция range()

Несмотря на то, что мы не видим последовательности чисел, она есть, и мы можем обращаться к ее элементам:

Хотя изменять их нельзя, так как, в отличие от списков, объекты range() относятся к группе неизменяемых:

Цикл for и range()

Теперь «соединим» for и range() :

Практическая работа

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

Напишите программу, которая заполняет список пятью словами, введенными с клавиатуры, измеряет длину каждого слова и добавляет полученное значение в другой список. Например, список слов – [‘yes’, ‘no’, ‘maybe’, ‘ok’, ‘what’], список длин – [3, 2, 5, 2, 4]. Оба списка должны выводиться на экран.

Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса

Источник

Цикл «for» в Python — универсальная управляющая конструкция

Что такое цикл for python. Смотреть фото Что такое цикл for python. Смотреть картинку Что такое цикл for python. Картинка про Что такое цикл for python. Фото Что такое цикл for python

Применение циклов

Концепция циклов — это не просто очередная абстрактная выдумка программистов. Повторяющиеся раз за разом операции окружают нас и в реальной жизни:

🥣 добление щепотки приправ в варящийся бульон и помешивание его до тех пор, пока пакетик специй не закончится,

🕙 следование строгому расписанию каждый будний день, пока не наступят долгожданные выходные,

🌄 даже банальная смена времён год,

— всё это циклы, и представить нормальную жизнь без них попросту невозможно.

Впрочем, то же касается и программирования. Представьте, что вам нужно последовательно напечатать числа от 1 до 9999999999. В отсутствии циклов, эту задачу пришлось бы выполнять ручками, что потребовало бы колоссального количества кода и огромных временных затрат:

Циклы же позволяют уместить такую многокилометровую запись в изящную и простую для понимания конструкцию, состоящую всего из двух строчек:

for i in range(1, 10000000000): print(i)

Смысл её крайне прост. В основе цикла for лежат последовательности, и в примере выше это последовательность чисел от 1 до 9999999999. for поэлементно её перебирает и выполняет код, который записан в теле цикла. В частности, для решения данной задачи туда была помещена инструкция, позволяющая выводить значение элемента последовательности на экран.

Итерации

👉 Чтобы выполнить итерацию, Python делает следующее:

Пример создания итерируемого объекта Для того чтобы создать собственный класс итерируемого объекта, нужно всего лишь внутри него реализовать два метода: __iter__() и __next__() :

Создадим простой строковый итератор, который на каждой итерации, при получении следующего элемента (т.е. символа), приводит его к верхнему регистру:

class ToUpperCase: def __init__(self, string_obj, position=0): «»»сохраняем строку, полученную из конструктора, в поле string_obj и задаём начальный индекс»»» self.string_obj = string_obj self.position = position def __iter__(self): «»» возвращаем сам объект «»» return self def __next__(self): «»» метод возвращает следующий элемент, но уже приведенный к верхнему регистру «»» if self.position >= len(self.string_obj): # исключение StopIteration() сообщает циклу for о завершении raise StopIteration() position = self.position # инкрементируем индекс self.position += 1 # возвращаем символ в uppercase-e return self.string_obj[position].upper() low_python = «python» high_python = ToUpperCase(low_python) for ch in high_python: print(ch, end=»») > PYTHON

Синтаксис for

Как было замечено, цикл for python — есть средство для перебора последовательностей. С его помощью можно совершать обход строк, списков, кортежей и описанных выше итерируемых объектов.

В простейшем случае он выглядит так:

for item in collection: # do something

aliceQuote = «The best way to explain it is to do it.» # с помощью цикла for посчитаем количество символов (с пробелами) в строке # зададим счетчик count = 0 # будем посимвольно обходить весь текст for letter in aliceQuote: # на каждой новой итерации: # в переменной letter будет храниться следующий символ предложения; # увеличиваем счетчик на 1; count += 1 print(count) > 39

range() и enumerate()

Вы уже наверняка запомнили, что for работает с последовательностями. В программировании очень часто приходится повторять какую-то операцию фиксированное количество раз. А где упоминается «количество чего-то», существует и последовательность, числовая.

👉 Для того чтобы выполнить какую-либо инструкцию строго определенное число раз, воспользуемся функцией range() :

# скажем Миру привет целых пять раз! for i in range(5): print(«Hello World!») > Hello World! Hello World! Hello World! Hello World! Hello World!

range() можно представлять, как функцию, что возвращает последовательность чисел, регулируемую количеством переданных в неё аргументов. Их может быть 1, 2 или 3:

Здесь start — это первый элемент последовательности (включительно), stop — последний (не включительно), а step — разность между следующим и предыдущим членами последовательности.

Что такое цикл for python. Смотреть фото Что такое цикл for python. Смотреть картинку Что такое цикл for python. Картинка про Что такое цикл for python. Фото Что такое цикл for python

# заменим каждый пятый символ предложения, начиная с 0-го, на * text = «Это не те дроиды, которых вы ищете» new_text = «» for char in enumerate(text): if char[0] % 5 == 0: new_text += ‘*’ else: new_text += char[1] print(new_text) > *то н* те *роид*, ко*орых*вы и*ете

break и continue

Два похожих оператора, которые можно встретить и в других языках программирования.

Здесь видно, как цикл, дойдя до числа 45 и вернув истину в условном выражении, прерывается и заканчивает свою работу.

# continue for num in range(40, 51): if num == 45: continue print(num) > 40 41 42 43 44 46 47 48 49 50

В случае continue происходит похожая ситуация, только прерывается лишь одна итерация, а сам же цикл продолжается.

group_of_students = [21, 18, 19, 21, 18] for age in group_of_students: if age Всё в порядке, они совершеннолетние

Best practice

Цикл по списку

Перебрать list в цикле не составляет никакого труда, поскольку список — объект итерируемый:

# есть список entities_of_warp = [«Tzeench», «Slaanesh», «Khorne», «Nurgle»] # просто берём список, «загружаем» его в цикл и без всякой задней мысли делаем обход for entity in entities_of_warp: print(entity) > Tzeench Slaanesh Khorne Nurgle

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

Цикл по словарю

Цикл, в таком случае, будет выглядеть следующим образом:

Цикл по строке

Строки, по сути своей — весьма простые последовательности, состоящие из символов. Поэтому обходить их в цикле тоже совсем несложно.

word = ‘Alabama’ for w in word: print(w, end=» «) > A l a b a m a

Как сделать цикл for с шагом

# выведем числа от 100 до 1000 с шагом 150 for nums in range(100, 1000, 150): print(nums) > 100 250 400 550 700 850

Обратный цикл for

Если вы еще не убедились в том, что range() полезна, то вот ещё пример: благодаря этой функции можно взять и обойти последовательность в обратном направлении.

for в одну строку

Крутая питоновская фишка, основанная на так называемых list comprehensions или, по-русски, генераторов. Их запись, быть может, несколько сложнее для понимания, зато очевидно короче и, по некоторым данным, она работает заметно быстрее на больших массивах данных.

В общем виде генератор выглядит так:

[результирующее выражение | цикл | опциональное условие]

Приведем пример, в котором продублируем каждый символ строки inputString :

# здесь letter * 2 — результирующее выражение; for letter in inputString — цикл, а необязательное условие опущено double_letter = [letter * 2 for letter in «Banana»] print(double_letter) > [‘BB’, ‘aa’, ‘nn’, ‘aa’, ‘nn’, ‘aa’]

Другой пример, но теперь уже с условием:

# создадим список, что будет состоять из четных чисел от нуля до тридцати # здесь if x % 2 == 0 — необязательное условие even_nums = [x for x in range(30) if x % 2 == 0] print(even_nums) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

Источник

Как работает цикл for в Python

Цикл for в Python используется для повторения оператора или части программы несколько раз. Он часто используется для обхода структур данных, таких как список, кортеж или словарь.

Синтаксис цикла for в Python приведен ниже.

Блок-схема цикла for

Что такое цикл for python. Смотреть фото Что такое цикл for python. Смотреть картинку Что такое цикл for python. Картинка про Что такое цикл for python. Фото Что такое цикл for python

Цикл for, использующийся в последовательности

Пример-1: Итерация строки с использованием цикла for.

Пример-2: Программа для печати таблицы с заданным числом.

Пример-3: Программа для печати суммы данного списка.

Цикл for с использованием функции range()

Функция range() используется для генерации последовательности чисел. Если мы передадим диапазон(10), он будет генерировать числа от 0 до 9. Синтаксис функции range() приведен ниже.

Рассмотрим следующие примеры:

Пример-1: Программа для последовательной печати чисел.

Пример – 2: Программа для печати таблицы с заданным номером.

Пример-3: Программа для печати четного числа, используя размер шага в диапазоне().

Мы также можем использовать функцию range() с последовательностью чисел. Функция len() сочетается с функцией range(), которая выполняет итерацию по последовательности с использованием индексации. Рассмотрим следующий пример.

Вложенный цикл for в Python

Python позволяет нам вкладывать любое количество циклов for внутри цикла for. Внутренний цикл выполняется n раз на каждой итерации внешнего цикла. Синтаксис приведен ниже.

Пример – 1: Вложенный цикл for.

Пример-2: Программа числовой пирамиды.

Использование оператора else с циклом for

В отличие от других языков, таких как C, C ++ или Java, Python позволяет нам использовать оператор else с циклом for, который может выполняться только тогда, когда все итерации исчерпаны. Здесь мы должны заметить, что если цикл содержит любой из операторов break, тогда оператор else не будет выполнен.

Цикл for полностью исчерпан, так как нет обрыва.

В приведенном выше примере цикл разорван из-за оператора break; следовательно, оператор else не будет выполняться. Оператор, находящийся рядом с блоком else, будет выполнен.

Цикл прерван из-за того, что оператор break … вышел из цикла. Мы узнаем больше об операторе break в следующем уроке.

Источник

Как работает цикл for в Python

В этой статье мы разберем, работу цикла for в Python.

Мы начнем с пары основных примеров и их синтаксиса. Далее обсудим, когда может быть полезен блок else, связанный с циклом for. Затем мы разберем итерактивные объекты (iterable), итераторы (iterator) и протокол итератора. Также узнаем, как создавать собственные итераторы и итерируемые объекты. После этого мы обсудим, как цикл for реализован с использованием итерактивных объектов и итераторов. Потом мы рассмотрим реализацию логики цикла for, используя цикл while и используя протокол итератора.
И наконец, для тех, кому интересно, мы разберем простой цикл for и пройдемся по инструкциям, которые интерпретатор Python выполняет при выполнении цикла for. Это должно помочь понять, что именно происходит внутри, во время работы цикла for.

Цикл for в Python

Оператор for является одним из двух операторов, используемых для создания циклов в Python, другим является оператор while. Если вы совсем не знакомы с итерациями в Python, то рекомендуем почитать статью Итерации в Python: операторы for, while, break и continue которая будет хорошей отправной точкой для изучения циклов и итераций.

Простой цикл for

Давайте начнем с простого цикла for, который перебирает список строк и печатает каждую строку.

Как видите, цикл перебирает все слова в списке и печатает их. То есть на каждом шаге цикла переменной word присваивается элемент списка, а затем выполняется кодовый блок. Поскольку список — это упорядоченная последовательность элементов, цикл проходит по ним в том же порядке.

Цикл for с условием else

В Python цикл for может иметь необязательное условие else. Кодовый блок в предложении else выполняется после завершения цикла for, то есть после того, как все элементы итерируемого элемента были исчерпаны. Теперь давайте посмотрим, как мы можем расширить предыдущий пример, чтобы включить условие else.

Когда полезно условие else?

Как вы могли заметить, блок else выполняется после завершения цикла for. Так какой смысл использовать блок else? Разве не будет выполнен следующий набор операторов после цикла for?

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

С помощью блока else мы можем избежать использования логического флага found_item. Давайте посмотрим, как мы можем переписать вышеуказанный метод с помощью else. Обратите внимание, что блок else будет пропущен, если в цикле for встречается оператор break.

Таким образом, блок else действительно полезен, только если у нас есть оператор break в цикле for, и нам нужно, чтобы выполнился набор операторов, если условие break никогда не выполнялось.

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

Синтаксис цикла for

Теперь, когда мы рассмотрели несколько основных примеров, давайте завершим этот раздел синтаксисом цикла for.

По сути, для каждого итерируемого элемента выполняется set_of_statements_1. Как только все элементы исчерпаны, управление переходит к блоку else и выполняется set_of_statements_2.

Обратите внимание, что предложение else является необязательным. Если блок else отсутствует, цикл завершается после того, как все элементы будут пройдены, и управление переходит к следующему оператору программы.

Итерируемые объекты (iterables) и итераторы (iterators)

Итерируемые объекты

В предыдущем разделе мы использовали термин «iterables» для обозначения объекта, который итерировался циклом for. Теперь давайте попробуем понять, что такое итерируемый объект в Python.

В Python итерируемый объект — это любой объект, который можно использовать в итерации с использованием цикла for. Это означает, что объект должен возвращать итератор при передаче в метод iter(). Давайте посмотрим примеры некоторых часто используемых встроенных итерируемых объектов в Python.

Как вы можете видеть, когда мы вызываем iter() для итерируемого объекта, он возвращает объект итератора.

Итераторы

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

Примеры итератора со списком.

Итераторы тоже итеративные объекты! Но..

Следует помнить одну интересную вещь: итераторы сами по себе также поддерживают (обязаны поддерживать согласно протоколу итератора) метод iter(). Это означает, что мы можем вызвать метод iter() для итератора и получить сам объект итератора.

Таким образом, мы можем использовать итераторы везде, где ожидается итерация, например, в цикле for.

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

Итерация по списку дважды

Обратите внимание, что это работает так, как мы ожидали.

Итерация через list_iterator дважды

Обратите внимание, что итератор будет исчерпан в первом цикле, а во второй раз мы просто видим пустой контейнер.

Протокол итератора

В предыдущем разделе мы увидели, что:

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

Создание своего собственного итератора

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

Теперь посмотрим, как он работает с циклом for.

Обратите внимание, что экземпляр Range является как итерируемым объектом, так и итератором.

Создание своего собственного итерируемого объекта

Давайте теперь используем наш RangeIterable с циклом for.

Как работает цикл for?

Теперь, когда мы поняли, что такое итератор и итерируемый объект, мы можем глубже понять, как на самом деле работает цикл for.

Давайте снова посмотрим на наш предыдущий пример.

Когда мы выполняем вышеуказанный блок кода, происходит следующее:

Примечание. Если в блоке кода, связанном с циклом for, встречается оператор break, то блок else пропускается.

Реализация логики цикла for с помощью оператора while

Мы могли бы реализовать вышеуказанную логику, используя оператор while следующим образом.

Цикл while ведет себя точно так же, как наш цикл for, и выдает следующий результат.

Разбор цикла for

В этом разделе мы разберем цикл for и пройдемся по инструкциям, которые интерпретатор исполняет при выполнении цикла for. Мы будем использовать модуль dis для разборки цикла for. Чтобы быть точным, мы будем использовать метод dis.dis, чтобы получить удобочитаемое представление дизассемблированного байт-кода.

Мы будем использовать тот же простой цикл for, который мы рассматривали до сих пор. Запишем следующий цикл for в файл for_loop.py.

Теперь мы можем получить читаемую форму байт-кода, вызвав dis.dismethod. Запустим следующую команду в терминале.

Каждый из столбцов в разобранном виде представляет следующее:

Теперь давайте шаг за шагом пройдемся по нашему разобранному байт-коду и попытаемся понять, что на самом деле происходит.
В этом описание термин TOS означает вершина стека (top of the stack)

Вув! Итак, мы закончили с разборкой инструкций для цикла for. Я надеюсь, что это поможет немного лучше понять работу цикла for.

Заключение

В этом посте мы рассмотрели следующее:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *