Answers:
这是一个简单的例子:
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
它继续到循环的下一个迭代。
continue
您可以做什么,但是它并不过分有用if letter != 'D': print 'Current Letter:', letter
我喜欢使用continue in loops,在您陷入“倒闭”之前,要完成许多竞争。因此,而不是像这样的代码:
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)。
continue
这种方式类似于使用GOTO
。但是,这是正确的使用方法GOTO
。
通常情况下,需要继续/有用的情况是当您想跳过循环中的其余代码并继续迭代时。
我真的不认为这是必要的,因为您可以始终使用if语句来提供相同的逻辑,但是对于提高代码的可读性可能会很有用。
if <condition>: continue
而不是if not <condition>: ...
避免在不使用缩进级别的情况下就需要缩进级别。
continue
语句时,我们实际上就跳出了条件测试部分,并允许循环的迭代继续进行到下一次迭代?在我看来,这比使用更好else
。仅仅是为了提高可读性和运行时性能?
有人对可读性发表了评论,说:“哦,它对可读性的帮助不大,谁在乎呢?”
假设您需要在主代码之前进行检查:
if precondition_fails(message): continue
''' main code here '''
请注意,您可以在之后执行此操作在编写主代码而无论如何都不会更改该代码。如果您区分代码,因为主代码没有间距变化,因此只会突出显示带有“继续”的添加行。
试想一下,如果您必须对生产代码进行断点修补,那么结果发现这仅仅是在添加一个行,并继续。显而易见,这是您查看代码时唯一的更改。如果您开始将主代码包装在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
。该代码只是不能使您看起来自己知道自己在做什么。