问题:在Python中使用“ continue”语句的示例?
该定义中的continue
语句是:
该continue
语句从循环的下一个迭代继续。
我找不到任何好的代码示例。
有人可以在continue
必要时提出一些简单的案例吗?
The definition of the continue
statement is:
The continue
statement continues with the next iteration of the loop.
I can’t find any good examples of code.
Could someone suggest some simple cases where continue
is necessary?
回答 0
这是一个简单的例子:
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
它继续到循环的下一个迭代。
Here’s a simple example:
for letter in 'Django':
if letter == 'D':
continue
print("Current Letter: " + letter)
Output will be:
Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o
It continues to the next iteration of the loop.
回答 1
我喜欢使用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)。
I like to use continue in loops where there are a lot of contitions to be fulfilled before you get “down to business”. So instead of code like this:
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()
I get code like this:
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()
By doing it this way I avoid very deeply nested code. Also, it is easy to optimize the loop by eliminating the most frequently occurring cases first, so that I only have to deal with the infrequent but important cases (e.g. divisor is 0) when there is no other showstopper.
回答 2
通常情况下,需要继续/有用的情况是当您想跳过循环中的其余代码并继续迭代时。
我真的不认为这是必要的,因为您可以始终使用if语句来提供相同的逻辑,但是对于提高代码的可读性可能会很有用。
Usually the situation where continue is necessary/useful, is when you want to skip the remaining code in the loop and continue iteration.
I don’t really believe it’s necessary, since you can always use if statements to provide the same logic, but it might be useful to increase readability of code.
回答 3
import random
for i in range(20):
x = random.randint(-5,5)
if x == 0: continue
print 1/x
继续是一个非常重要的控制声明。上面的代码表示一种典型的应用,其中可以避免除以零的结果。当我需要存储程序的输出时,我经常使用它,但是如果程序崩溃,我不想存储输出。请注意,要测试上面的示例,请用print 1 / float(x)替换最后一个语句,否则只要有小数,您就会得到零,因为randint返回一个整数。为了清楚起见,我省略了它。
import random
for i in range(20):
x = random.randint(-5,5)
if x == 0: continue
print 1/x
continue is an extremely important control statement. The above code indicates a typical application, where the result of a division by zero can be avoided. I use it often when I need to store the output from programs, but dont want to store the output if the program has crashed. Note, to test the above example, replace the last statement with print 1/float(x), or you’ll get zeros whenever there’s a fraction, since randint returns an integer. I omitted it for clarity.
回答 4
有人对可读性发表了评论,说:“哦,它对可读性的帮助不大,谁在乎呢?”
假设您需要在主代码之前进行检查:
if precondition_fails(message): continue
''' main code here '''
请注意,您可以在之后执行此操作在编写主代码而无论如何都不会更改该代码。如果您区分代码,因为主代码没有间距变化,因此只会突出显示带有“继续”的添加行。
试想一下,如果您必须对生产代码进行断点修补,那么结果发现这仅仅是在添加一个行,并继续。显而易见,这是您查看代码时唯一的更改。如果您开始将主代码包装在if / else中,则diff将突出显示新缩进的代码,除非您忽略间距更改,这在Python中尤其危险。我认为除非您一直处于必须在短时间内推出代码的情况,否则您可能不会完全理解这一点。
Some people have commented about readability, saying “Oh it doesn’t help readability that much, who cares?”
Suppose you need a check before the main code:
if precondition_fails(message): continue
''' main code here '''
Note you can do this after the main code was written without changing that code in anyway. If you diff the code, only the added line with “continue” will be highlighted since there are no spacing changes to the main code.
Imagine if you have to do a breakfix of production code, which turns out to simply be adding a line with continue. It’s easy to see that’s the only change when you review the code. If you start wrapping the main code in if/else, diff will highlight the newly indented code, unless you ignore spacing changes, which is dangerous particularly in Python. I think unless you’ve been in the situation where you have to roll out code on short notice, you might not fully appreciate this.
回答 5
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']
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']
回答 6
假设我们要打印所有不是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
Let’s say we want to print all numbers which are not multiples of 3 and 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
回答 7
这不是绝对必要的,因为它可以使用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
语句后没有出现错误的值。
It is not absolutely necessary since it can be done with IFs but it’s more readable and also less expensive in run time.
I use it in order to skip an iteration in a loop if the data does not meet some requirements:
# 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))
Output:
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
As you can see, the wrong value did not make it after the continue
statement.
回答 8
例如,如果您想根据变量的值做不同的事情:
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语句并直接转到循环的下一项。
For example if you want to do diferent things depending on the value of a variable:
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
In the example above if I use break
the interpreter will skip the loop. But with continue
it only skips the if-elif statements and go directly to the next item of the loop.
回答 9
continue
只需跳过循环中的其余代码,直到下一次迭代
continue
simply skips the rest of the code in the loop until next iteration