Определение из continue
утверждения:
continue
Утверждение продолжается со следующей итерации цикла.
Я не могу найти хороших примеров кода.
Может ли кто-нибудь предложить несколько простых случаев, когда continue
это необходимо?
Определение из continue
утверждения:
continue
Утверждение продолжается со следующей итерации цикла.
Я не могу найти хороших примеров кода.
Может ли кто-нибудь предложить несколько простых случаев, когда continue
это необходимо?
Ответы:
Вот простой пример:
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
Это продолжается до следующей итерации цикла.
continue
делает, но это не слишком полезно, когда вы могли бы сделатьif letter != 'D': print 'Current Letter:', letter
Мне нравится использовать продолжение в циклах, где нужно выполнить много заданий, прежде чем приступить к делу. Так что вместо кода вот так:
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), когда нет другого showtopper.
continue
таким образом похоже на использование GOTO
. Тем не менее, это правильный способ использования GOTO
.
Обычно ситуация, когда продолжить необходимо / полезно, это когда вы хотите пропустить оставшийся код в цикле и продолжить итерацию.
Я не очень верю, что это необходимо, так как вы всегда можете использовать операторы if для обеспечения одинаковой логики, но это может быть полезно для повышения читабельности кода.
if <condition>: continue
а не if not <condition>: ...
избегание уровня отступа, который в противном случае был бы необходим, если бы он был написан без него.
continue
оператор, мы по существу выпрыгиваем из секции условного тестирования и позволяем итерации цикла продолжить к следующей итерации? Мне не очевидно, как это было бы лучше, чем использовать else
. Это только улучшенная читаемость и производительность во время выполнения?
import random
for i in range(20):
x = random.randint(-5,5)
if x == 0: continue
print 1/x
продолжить это чрезвычайно важное контрольное заявление. Приведенный выше код указывает на типичное применение, в котором можно избежать результата деления на ноль. Я часто использую его, когда мне нужно сохранить выходные данные программ, но я не хочу сохранять выходные данные, если программа потерпела крах. Обратите внимание: чтобы проверить приведенный выше пример, замените последний оператор на print 1 / float (x), иначе вы получите нули, когда есть дробь, поскольку randint возвращает целое число. Я опустил это для ясности.
Некоторые люди прокомментировали читабельность, сказав: «О, это не так сильно помогает читаемости, кого это волнует?»
Предположим, вам нужна проверка перед основным кодом:
if precondition_fails(message): continue
''' main code here '''
Обратите внимание, что вы можете сделать это после как основной код был написан, не изменяя его в любом случае. Если вы измените код, будет подсвечена только добавленная строка с «продолжить», так как в основном коде нет пробелов.
Представьте, что вам нужно внести исправление в производственный код, который просто добавляет строку с помощью 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']
continue
утверждение ? Это может быть устранено с помощью , и код будет так же читабелен. element not in colors
Допустим, мы хотим напечатать все числа, которые не кратны 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
if x %3 == 0 or x % 5 == 0:
, pass
, else:
,print x
continue
. Мой вывод заключается в том, что в этом нет необходимости , но в некоторых случаях (например, в этом) код более удобен для чтения continue
. Это очень хороший пример.
Это не является абсолютно необходимым, поскольку это может быть сделано с помощью 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
утверждения.
if
может делать только то, что continue
делает, если весь код содержится в блоке. continue
пропускает код, который находится даже за пределами if
блока.
Например, если вы хотите делать разные вещи в зависимости от значения переменной:
my_var = 1
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 и переходите непосредственно к следующему элементу цикла.
my_var
оф 0
.
continue
.
elif
должен быть if
. Код просто не создает впечатление, что вы знаете, что делаете.