Оператор continue в Python

Оператор 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».

Оставьте комментарий

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