为啥“继续”和“中断”会给出相同的结果? [关闭]
Posted
技术标签:
【中文标题】为啥“继续”和“中断”会给出相同的结果? [关闭]【英文标题】:Why does 'continue' and 'break' give the same results? [closed]为什么“继续”和“中断”会给出相同的结果? [关闭] 【发布时间】:2019-04-24 19:24:44 【问题描述】:在我的代码中,关键字“继续”和“中断”给出相同的输出。是什么原因?
第一个代码:
x = 0
while x < 5:
if x == 2:
break
print(x)
x += 1
输出: 0 1
第二个代码:
x = 0
while x < 5:
if x == 2:
continue
print(x)
x += 1
输出: 0 1
在第一个代码中,我希望得到相同的输出。在第二个中,我希望输出是这样的: 输出: 0 1 3 4
【问题讨论】:
我建议看看 continue 做了什么,因为我不认为它做你认为它做的事情。 @brunns:你是对的,第二个永远不会终止,但是如果你在解释器中运行这段代码,你会看到 0、1,然后只是一个闪烁的光标:) 【参考方案1】:continue
停止循环的当前迭代并立即进入循环的下一个迭代,跳过循环体的其余部分。
在您的while
循环中,主体的其余部分包括语句x += 1
。所以x
永远不会变成3
,它停留在2
。从那时起,if x == 2:
测试始终成功,并且它不断跳过增量,并在一遍又一遍地重复该循环时卡住。
在for
循环中,它会跳过循环体的剩余部分,然后从正在循环的迭代器中获取下一项。如果您将循环更改为:
for x in range(5):
if x == 2:
continue
print(x)
你会得到你期望的输出。递增x
不是在循环体中完成的,而是由for
语句本身完成的。它在每次迭代开始时自动发生。所以continue
只会跳过print
语句。
【讨论】:
您能解释一下 for 循环中的“继续”关键字吗?我不认为我已经理解它在 for 循环中的作用。 我添加了关于for
与 while
的不同之处的说明。
很好的解释!我现在明白了这些差异。我需要意识到增量是由for
本身完成的,这与while
不同。谢谢!【参考方案2】:
python 中的continue
关键字告诉程序跳过循环的其余内容并跳转到下一次迭代。
在您的第二个代码中,您会注意到程序永远不会停止执行。那是因为一旦x == 2
是True
,程序将点击continue
然后跳转到下一个迭代......它再次检查x
是否再次等于2,并将点击continue
。这是一个无限循环。
【讨论】:
【参考方案3】:break
立即退出循环,continue
停止当前迭代直接开始下一次迭代(不退出循环)。
【讨论】:
【参考方案4】:第二个代码示例永远不会终止,因为continue
会重新启动while 循环而不增加x
。
【讨论】:
以上是关于为啥“继续”和“中断”会给出相同的结果? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Math.Exp 在 32 位和 64 位之间给出不同的结果,相同的输入,相同的硬件
为啥“StratifiedShuffleSplit”对数据集的每个拆分都给出相同的结果?
如果 x != x 给出相同的结果,为啥 isnan(x) 存在?