是否有可能在Python中突破两个 for 循环? 即
for i in range(1,100):
for j in range(1,100):
break ALL the loops!
答案 0 :(得分:33)
不,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
答案 1 :(得分:4)
PEP 3136中提出了几种解决方案,但BDFL rejected it:
我拒绝它,因为代码如此复杂,需要这样做 功能非常罕见。在大多数情况下,存在解决方法 产生干净的代码,例如使用'return'。虽然我很有信心 有一些(罕见的)真实案例,其中代码清晰 遭受重构,使得有可能使用return,这个 被两个问题所抵消:
永久性地增加了语言的复杂性。这不仅会影响所有Python实现,还会影响每个源分析工具, 当然还有该语言的所有文档。
- 醇>
我期望该功能会被滥用,而不是正确使用,导致代码清晰度净减少(测量到 今后编写的所有Python代码)。懒惰的程序员无处不在, 在你知道它之前,你的手上有一个令人难以置信的混乱 无法理解的代码。
答案 2 :(得分:2)
不,你不能指定要打破多少循环。将代码放在函数中并使用return
。
答案 3 :(得分:1)
另一种选择:在内部循环中使用标记变量,并在使用True
时将其设置为break
。然后用它来break
外循环。
答案 4 :(得分:1)
for i in range(1,100):
breaking = false
for j in range(1,100):
if foundAReasonToBreak:
breaking = true
break
if breaking:
break
答案 5 :(得分:1)
try:
for i in range(1,10):
print i
for j in range(1,10):
if j == 5: raise AssertionError
print j
except AssertionError:
pass
print "I'm free"
这有点令人反感,但它似乎完成了你所要求的。
编辑:我看到@phihag发布的内容类似于我正在尝试的内容。