Оператор continue в Python позволяет пропустить остаток текущей итерации и возобновить выполнение кода со следующей. Концептуально он очень похож на оператор break
, который полностью завершает цикл. Но если оператор break
используется для выхода из цикла, то оператор continue
просто пропустит остаток текущей итерации и продолжит выполнение со следующей. Как и break
, continue
может использоваться как в циклах for
, так и в циклах while
.
Синтаксис оператора continue
Чтобы пропустить оставшуюся часть кода в итерации цикла, просто напишите ключевое слово continue
в отдельной строке. Оператор continue
должен находиться внутри цикла, иначе его использование приведет к синтаксической ошибке.
Также continue
следует использовать с условным оператором, так как в противном случае за ним последует бесполезный, недостижимый код.
Вот базовый синтаксис для оператора continue
в цикле for
:
for element in iterable: # code above if condition: continue # code below
А вот использование continue в цикле while:
while loop_condition: # code above if condition: continue # code below
Использование continue в цикле for
Цикл for
перебирает все элементы в итерируемом объекте. Применение оператора continue
позволяет пропустить выполнение кода для определенных элементов на основе условия.
Пример:
dogs = ["Scooby-Doo", "Snoopy", "Goofy", "Clifford", "Astro"] sick_dogs = ["Snoopy", "Clifford"] for dog in dogs: print(f"{dog}'s activities: ") print(f" Gets a treat.") if dog in sick_dogs: continue print(f" Plays fetch.") print(f" Goes running in the yard.")
Вывод:
Scooby-Doo's activities: Gets a treat. Plays fetch. Goes running in the yard. Snoopy's activities: Gets a treat. Goofy's activities: Gets a treat. Plays fetch. Goes running in the yard. Clifford's activities: Gets a treat. Astro's activities: Gets a treat. Plays fetch. Goes running in the yard.
Цель кода в этом примере – перечислить дневную активность некоторых собак. Каждая собака получает лакомство, но собаки, которые больны и которым нужен отдых, пропускают физические упражнения – игру в мяч и бег во дворе.
Работает это следующим образом. Мы перебираем список dogs
с помощью цикла for в строке 4. Больные собаки задаются в списке sick_dogs
(Snoopy и Clifford), а строки 8 и 9 пропускают физические упражнения для них с помощью оператора continue.
Использование continue в цикле while
Оператор continue также можно использовать внутри циклов while
. Рассмотрим тот же пример со списком собак, переписанный с использованием цикла while
:
dogs = ["Scooby-Doo", "Snoopy", "Goofy", "Clifford", "Astro"] sick_dogs = ["Snoopy", "Clifford"] i = 0 while i < len(dogs): dog = dogs[i] i += 1 print(f"{dog}'s activities: ") print(f" Gets a treat.") if dog in sick_dogs: continue print(f" Plays fetch.") print(f" Goes running in the yard.")
Вывод:
Scooby-Doo's activities: Gets a treat. Plays fetch. Goes running in the yard. Snoopy's activities: Gets a treat. Goofy's activities: Gets a treat. Plays fetch. Goes running in the yard. Clifford's activities: Gets a treat. Astro's activities: Gets a treat. Plays fetch. Goes running in the yard.
Используя цикл while
, мы должны добавить некоторый код для индексации (цикл for
делает это вместо нас за кулисами).
Программа инициализирует индекс i
в строке 4, а затем обращается к элементу dog
из списка в строке 6. Значение индекса увеличивается в строке 7, чтобы на следующей итерации получить следующую кличку. Инкрементировать i
нужно непременно перед блоком continue
в строках 12 и 13. В противном случае значение i
не будет увеличено для первой больной собаки, и программа застрянет в бесконечном цикле.
Поведение continue во вложенных циклах
Как и оператор break
, при использовании во вложенных циклах оператор continue
влияет только на самый внутренний цикл, в котором он находится.
Пример:
for i in range(3): for j in range(3): if j == i: continue print(f"({i}, {j})")
Вывод:
(0, 1) (0, 2) (1, 0) (1, 2) (2, 0) (2, 1)
Здесь мы выводим все пары целых чисел от 0 до 2, но пропускаем те, в которых есть два одинаковых числа. Для этого используются два вложенных цикла for
в строках 1 и 2. Затем, в строке 3, проверяется равенство чисел. Если числа равны, то оператор print
(строка 5) пропускается благодаря continue в строке 4. Оператор continue
завершает итерацию только самого внутреннего цикла (for
в строке 2).
Использование оператора if в качестве альтернативы continue
Альтернативой оператору continue
является использование оператора if
. Стратегически грамотно разместив оператор if
в структуре цикла, можно условно выполнить или пропустить определенные блоки кода в зависимости от желаемых критериев.
Этот альтернативный подход улучшает читаемость кода, облегчая выявление условий, влияющих на выполнение определенных сегментов кода. Решение об использовании оператора if
или оператора continue
часто сводится к личным стилистическим предпочтениям, при этом оба варианта предлагают эффективные способы управления потоком цикла.
Пример:
dogs = ["Scooby-Doo", "Snoopy", "Goofy", "Clifford", "Astro"] sick_dogs = ["Snoopy", "Clifford"] for dog in dogs: print(f"{dog}'s activities: ") print(f" Gets a treat.") if dog not in sick_dogs: print(f" Plays fetch.") print(f" Goes running in the yard.")
Здесь реализована та же логика, что и в первом примере, и получается тот же результат. Однако вместо использования continue
для пропуска физических упражнений для больных собак используется оператор if
в строке 8.
Условие if dog in sick_dogs:
(строка 8 в самом первом примере) превращается в if dog not in sick_dogs:
, т. е. добавляется оператор not
. Начальный код пропускал физическую активность, если собака больна, а этот код разрешает физическую активность, если собака не больна.
Итоги
Оператор continue
в Python позволяет пропустить оставшуюся часть текущей итерации внутри цикла, что позволяет продолжить выполнение кода со следующей итерации. Как и оператор break
, continue
часто используется в условных операторах для выборочного выполнения кода на основе определенных условий.
Чтобы применить оператор continue
, поместите его в отдельную строку внутри цикла. Обычно continue
размещается в блоке if
, который проверяет определенное условие.
Вот пример использования continue
внутри цикла for
:
for dog in dogs: # Какой-то код if dog in sick_dogs: continue # Код для активностей здоровых собак
Пример использования continue
в цикле while
:
i = 0 while i < len(dogs): # Какой-то код if dogs[i] in sick_dogs: i += 1 continue # Код для активностей здоровых собак
В качестве альтернативы continue
, чтобы обеспечить ту же логику выполнения и при этом улучшить читаемость, можно использовать оператор if
.
При использовании внутри вложенных циклов оператор continue
влияет только на самый внутренний цикл, в котором он находится.
Перевод статьи «The Python continue Statement».