在Python中使用“continue”语句的例子?
continue语句的定义是:
continue语句继续循环的下一次迭代。
我找不到任何好的代码示例。
有人可以build议一些简单的情况下continue
是必要的吗?
这是一个简单的例子:
for letter in 'Django': # First Example 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
它继续循环的下一个迭代:
我喜欢在循环中继续使用,在你“做生意”之前,有许多要做的工作。 所以,而不是像这样的代码:
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)。
通常情况下,继续是必要/有用的,是当你想跳过循环中的剩余代码并继续迭代。
我不认为这是必要的,因为你总是可以使用if语句来提供相同的逻辑,但是增加代码的可读性可能是有用的。
import random for i in range(20): x = random.randint(-5,5) if x == 0: continue print 1/x
继续是一个非常重要的控制语句。 上面的代码表示一个典型的应用程序,其中可以避免被零除的结果。 我经常使用它,当我需要stored procedures的输出,但不想存储输出,如果程序崩溃。 注意,为了testing上面的例子,用print 1 / float(x)replace最后一条语句,或者只要有一个分数,就会得到零,因为randint返回一个整数。 为了清楚,我省略了它。
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']
例如,如果你想根据variables的值做不同的事情:
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语句并直接转到循环的下一个项目。
假设我们要打印所有不是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 precondition_fails(message): continue ''' main code here '''
注意你可以在主代码写完之后做这个,而不用改变代码。 如果您对代码进行了区分,则只有添加了“continue”的行才会突出显示,因为主代码没有间距变化。
想象一下,如果你必须做一个产品代码的中断,结果只是继续添加一行。 当您查看代码时,很容易看到这是唯一的变化。 如果开始将主代码封装在if / else中,diff将突出显示新缩进的代码,除非您忽略间距更改,这在Python中尤其危险。 我认为除非你遇到了在短时间内不得不推出代码的情况,否则你可能不会完全明白这一点。
这不是绝对必要的,因为它可以用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
声明之后。