跳出两个循环
可能是重复的问题:
如何在Python中跳出多个循环?
在Python中,有办法同时跳出两个for循环吗?
也就是说:
for i in range(1,100):
for j in range(1,100):
break ALL the loops!
6 个回答
2
另一种选择是:在内层循环中使用一个标志变量,当你使用break
语句时,把这个变量设置为True
。然后你可以用这个标志来控制外层循环的break
。
5
在 PEP 3136 中提出了几种解决方案,但BDFL 拒绝了这些方案:
我拒绝这个提案是因为,代码复杂到需要这个功能的情况非常少见。在大多数情况下,有现成的替代方法可以写出清晰的代码,比如使用 'return'。虽然我相信确实有一些(少见的)真实案例,重构代码以便使用 return 可能会影响代码的清晰度,但这有两个问题:
这会给语言增加复杂性,而且是永久性的。这不仅影响所有的Python实现,还会影响每一个源代码分析工具,当然也包括所有的语言文档。
我担心这个功能会被滥用,而不是被正确使用,导致代码的清晰度整体下降(在今后所有编写的Python代码中衡量)。懒惰的程序员到处都是,没过多久,你就会发现手头的代码变得一团糟,完全看不懂。
36
不,Python里没有嵌套的 break
语句。
你可以简化你的函数,像这样:
import itertools
for i,j in itertools.product(range(1, 100), repeat=2):
break
.. 或者把代码放到一个单独的函数里,然后使用 return
:
def _helper():
for i in range(1,100):
for j in range(1,100):
return
_helper()
.. 或者使用异常处理:
class BreakAllTheLoops(BaseException): pass
try:
for i in range(1,100):
for j in range(1,100):
raise BreakAllTheLoops()
except BreakAllTheLoops:
pass
.. 或者使用 for-else-continue 结构:
for i in range(1,100):
for j in range(1,100):
break
else:
continue
break
.. 或者使用一个标志变量:
exitFlag = False
for i in range(1,100):
for j in range(1,100):
exitFlag = True
break
if exitFlag:
break