Пример использования оператора "continue" в Python?
на определение на continue
инструкция:
на
continue
оператор продолжается со следующей итерацией цикла.
Я не могу найти хорошие примеры кода.
может кто-нибудь предложить несколько простых случаев, когда continue
надо?
9 ответов
вот простой пример :
for letter in 'Django':
if letter == 'D':
continue
print 'Current Letter:', letter
результат должен выглядеть так :
Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o
он продолжается со следующей итерацией цикла:
мне нравится использовать дальше в циклах, где есть много условиях должны быть выполнены, прежде чем вы получите "приступить к делу". Поэтому вместо такого кода:
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()
делая это таким образом, я избегаю очень глубоко вложенного кода. Кроме того, легко оптимизировать цикл, сначала исключив наиболее часто встречающиеся случаи, так что мне приходится иметь дело только с нечастыми, но важными случаями (например, делитель равен 0), когда нет других showstopper.
обычно ситуация, когда продолжение необходимо / полезно, когда вы хотите пропустить оставшийся код в цикле и продолжить итерацию.
Я действительно не считаю, что это необходимо, так как вы всегда можете использовать операторы if для обеспечения той же логики, но может быть полезно увеличить читаемость кода.
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 возвращает целое число. Я опустил его на ясность.
некоторые люди прокомментировали читаемость, говоря: "о, это не помогает читаемости, кто заботится?"
Предположим, вам нужна проверка перед основным кодом:
if precondition_fails(message): continue
''' main code here '''
Примечание Вы можете сделать это после основной код был написан без изменения этого кода в любом случае. Если вы различаете код, будет выделена только добавленная строка с "продолжить", так как в основном коде нет изменений интервалов.
представьте, если вам нужно сделать breakfix производственного кода, который оказывается просто добавлением строки с continue. Легко видеть, что это единственное изменение, когда вы просматриваете код. Если вы начнете обертывать основной код в if / else, diff выделит новый отступ, если вы не игнорируете изменения интервалов, что опасно, особенно в Python. Я думаю, что если вы не были в ситуации, когда вам нужно развернуть код в кратчайшие сроки, вы можете не полностью оценить это.
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']
допустим, мы хотим напечатать все числа, которые не кратны 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
например, если вы хотите делать разные вещи в зависимости от значения переменной:
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 и переходит непосредственно к следующему элементу цикла.
это не обязательно, так как это можно сделать с помощью IFs, но это более читаемо, а также дешевле во время выполнения.
Я использую его для того, чтобы пропустить итерацию в цикле, если данные не соответствуют некоторым требованиям:
# 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
заявление.