На этом шаге мы вспомним особенности работы циклических конструкций.
Для повтора выполнения фрагментов кода в Python существует два типа циклов:
С их помощью можно легко написать занимающую всего две строки кода программу, которая будет выполняться бесконечно. Реализовать подобный повтор выполнения иным способом будет непросто (в качестве альтернативы можно воспользоваться рекурсией).
В примере 1.11 показаны в действии оба варианта циклов.
# Объявление цикла for for i in [0, 1, 2]: print(i) 0 1 2 # Цикл while - аналогичная семантика j = 0 while j < 3: print(j) j = j + 1 0 1 2
Оба варианта циклов выводят целые числа 0, 1 и 2 в командную оболочку, но делают это по-разному.
Цикл for объявляет переменную цикла i, принимающую последовательно все значения из списка [0, 1, 2]. Его выполнение продолжается, пока значения не закончатся.
При использовании цикла while тело цикла выполняется до тех пор, пока не будет выполнено заданное условие - в данном случае, пока j < 3.
Существуют два основных способа выхода из цикла:
while True: break # цикл не бесконечный print("hello world") # hello world
Мы создали цикл while с условием, тождественно равным True. Так что, на первый взгляд, кажется, будто он будет выполняться бесконечно. Бесконечный цикл while - распространенная практика при, например, разработке веб-серверов, бесконечно повторяющих процедуру ожидания нового вебзапроса и его обработки.
Однако в некоторых случаях бывает нужно досрочно прервать выполнение цикла. В примере с веб-сервером имеет смысл приостановить выдачу файлов из соображений безопасности, если сервер подвергается атаке. В подобных случаях можно воспользоваться ключевым словом break для выхода из цикла и выполнения следующего за ним кода. В приведенном выше примере 1.12 после досрочного завершения цикла выполняется print("hello world").
Можно также приказать интерпретатору Python пропустить определенные части цикла, не прибегая к досрочному выходу из него. Например, вместо полного останова веб-сервера пропустить вредоносные веб-запросы. Реализовать это можно с помощью оператора continue, завершающего выполнение текущей итерации цикла и возвращающего выполнение обратно к условию цикла (пример 1.13).
while True: continue print("43") # недостижимый код
Данный код выполняется бесконечно, но оператор print не выполняется никогда. Дело в том, что оператор continue завершает текущую итерацию цикла и возвращает поток выполнения в его начало, поэтому print() никогда не достигается. Подобный никогда не выполняемый код называется недостижимым (dead code). Поэтому оператор continue (как и оператор break) часто применяется при определенных условиях в среде условного выполнения if-else.
На следующем шаге мы поговорим о функциях.