在while循环中,使用continue语句是必要的吗?

7

我对在while循环中使用continue语句感到困惑。

在这个高赞回答中,continue被用于while循环中,表示执行应该继续(显然)。它的定义也提到了它在while循环中的使用:

continue只能出现在for或while循环的语法嵌套中

但在有关continue使用的这个问题(同样高赞)中,所有示例都是使用for循环给出的。

根据我运行的测试,似乎完全没有必要。这段代码:

while True:
    data = raw_input("Enter string in all caps: ")
    if not data.isupper():
        print("Try again.")
        continue
    else:
        break

这款产品的效果与此一样好:
while True:
    data = raw_input("Enter string in all caps: ")
    if not data.isupper():
        print("Try again.")
    else:
        break

我漏掉了什么?

2
你没有错过任何东西 - 在你的简单示例中,它是完全不必要的。在更复杂的示例(或更差的组织代码)中,它可能会有用(例如,如果你保留了 continue,就可以删除 "else" 子句)。 - Fhaab
1
两个示例具有相同的行为:在这里,continue在程序上是无用的。在您的示例中,它对于审阅者更容易理解您的算法很有用。对于IDE自动取消缩进下一行(就像使用pass语句一样)也可能很有用。 - Frodon
2
continue的意思是:终止当前循环迭代(即跳过剩余的循环体部分),然后继续下一次迭代。 - Lukas Graf
你链接的问题已经解释了continue的作用。他们的例子使用for而不是while并不重要,因为continue对于这两种循环都是相同的。 - xgord
3个回答

11

这是一个非常简单的例子,其中continue实际上会产生可量化的影响:

animals = ['dog', 'cat', 'pig', 'horse', 'cow']
while animals:
    a = animals.pop()
    if a == 'dog':
        continue
    elif a == 'horse':
        break
    print(a)

如果你运行这段代码,你会注意到并没有打印出dog。这是因为当Python遇到continue时,它跳过了while循环剩余的代码,直接回到顶部开始执行。

同样地,当出现'horse'时,由于我们使用了break语句来退出整个while循环,你也看不到'horse''cow'

说了这么多,我只想说超过90%的循环不需要使用continue语句。1这只是一个猜测,我没有任何真实数据来支持这个说法 :)


通过这种方式也可以避免使用'continue' animals = ['狗', '猫', '猪', '马', '牛'] while animals: a = animals.pop()
if a == '马': break if a != '狗': print(a)
- Jcyrss

2

continue 意味着跳到循环的下一个迭代。无论如何,continue 语句后面不会再发生任何事情,因此行为是相同的。

您引用的文档只是在说明 continue 只能在循环结构内使用,在外部,它是没有意义的。


啊,所以continue会在循环内部中断,而break会在循环外部中断。我理解的对吗? - Gabriel
2
是的,这是一种看待它的方式。我经常使用continue来表示“丢弃此循环体的其余部分,我们不再感兴趣。但不要退出循环,只是在迭代中丢弃这一步。” - Athena

2

continue仅在你想跳到循环的下一个迭代而不执行其余循环时才是必要的。如果它是最后要运行的语句,则没有任何影响。

break则完全退出循环。

举个例子:

items = [1, 2, 3, 4, 5]
print('before loop')
for item in items:
    if item == 5:
        break
    if item < 3:
        continue
    print(item)

print('after loop')

结果:

before loop
3
4
after loop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接