Подтвердить что ты не робот

Пример использования инструкции "continue" в Python?

Определение оператора continue:

Оператор continue продолжается со следующей итерации цикла.

Я не могу найти хорошие примеры кода.

Может ли кто-нибудь предложить несколько простых случаев, когда необходимо continue?

4b9b3361

Ответ 1

Вот простой пример:

for letter in 'Django':    
    if letter == 'D':
        continue
    printf("Current Letter: {letter}")

Выход будет:

Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o

Это продолжается до следующей итерации цикла.

Ответ 2

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

for x, y in zip(a, b):
    if x > y:
        z = calculate_z(x, y)
        if y - z < x:
            y = min(y, z)
            if x ** 2 - y ** 2 > 0:
                lots()
                of()
                code()
                here()

Я получаю код следующим образом:

for x, y in zip(a, b):
    if x <= y:
        continue
    z = calculate_z(x, y)
    if y - z >= x:
        continue
    y = min(y, z)
    if x ** 2 - y ** 2 <= 0:
        continue
    lots()
    of()
    code()
    here()

Выполняя это, я избегаю очень глубоко вложенного кода. Кроме того, легко оптимизировать цикл, сначала устраняя наиболее часто встречающиеся случаи, поэтому мне приходится иметь дело только с нечастыми, но важными случаями (например, divisor равно 0), когда нет другого showstopper.

Ответ 3

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

Я действительно не считаю это необходимым, так как вы всегда можете использовать операторы if для предоставления той же логики, но может быть полезно повысить читаемость кода.

Ответ 4

import random  

for i in range(20):  
    x = random.randint(-5,5)  
    if x == 0: continue  
    print 1/x  

continue - чрезвычайно важный контрольный оператор. Вышеприведенный код указывает типичное приложение, в котором можно избежать результата деления на ноль. Я часто использую его, когда мне нужно сохранять выходные данные из программ, но не хочу сохранять вывод, если программа разбилась. Обратите внимание: чтобы проверить приведенный выше пример, замените последний оператор на print 1/float (x), или вы получите нули всякий раз, когда есть доля, так как randint возвращает целое число. Я пропустил это для ясности.

Ответ 5

Некоторые люди прокомментировали удобочитаемость, заявив: "О, это не помогает читабельности, кого это волнует?"

Предположим, вам нужна проверка перед основным кодом:

if precondition_fails(message): continue

''' main code here '''

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

Представьте, что вам нужно сделать breakfix производственного кода, который, как оказалось, просто добавляет строку с продолжением. Легко видеть, что это единственное изменение при просмотре кода. Если вы начнете обертывать основной код в if/else, diff будет выделять новый код с отступом, если вы не проигнорируете изменения интервалов, что особенно опасно для Python. Я думаю, что если вы не были в ситуации, когда вам нужно быстро вывести код, вы можете не в полной мере оценить это.

Ответ 6

def filter_out_colors(elements):
  colors = ['red', 'green']
  result = []
  for element in elements:
    if element in colors:
       continue # skip the element
    # You can do whatever here
    result.append(element)
  return result

  >>> filter_out_colors(['lemon', 'orange', 'red', 'pear'])
  ['lemon', 'orange', 'pear']

Ответ 7

Скажем, мы хотим напечатать все числа, не кратные 3 и 5

for x in range(0, 101):
    if x % 3 ==0 or x % 5 == 0:
        continue
        #no more code is executed, we go to the next number 
    print x

Ответ 8

Это не совсем необходимо, так как это можно сделать с IF, но это более читаемо, а также менее дорогое время выполнения.

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

# List of times at which git commits were done.
# Formatted in hour, minutes in tuples.
# Note the last one has some fantasy.
commit_times = [(8,20), (9,30), (11, 45), (15, 50), (17, 45), (27, 132)]

for time in commit_times:
    hour = time[0]
    minutes = time[1]

    # If the hour is not between 0 and 24
    # and the minutes not between 0 and 59 then we know something is wrong.
    # Then we don't want to use this value,
    # we skip directly to the next iteration in the loop.
    if not (0 <= hour <= 24 and 0 <= minutes <= 59):
        continue

    # From here you know the time format in the tuples is reliable.
    # Apply some logic based on time.
    print("Someone commited at {h}:{m}".format(h=hour, m=minutes))

Вывод:

Someone commited at 8:20
Someone commited at 9:30
Someone commited at 11:45
Someone commited at 15:50
Someone commited at 17:45

Как вы можете видеть, неправильное значение не произвело его после оператора continue.

Ответ 9

Например, если вы хотите делать разные вещи в зависимости от значения переменной:

for items in range(0,100):
    if my_var < 10:
        continue
    elif my_var == 10:
        print("hit")
    elif my_var > 10:
        print("passed")
    my_var = my_var + 1

В приведенном выше примере, если я использую break, интерпретатор пропустит цикл. Но с continue он пропускает только инструкции if-elif и переходит непосредственно к следующему элементу цикла.