打破两个循环

时间:2012-01-27 18:23:11

标签: python loops for-loop

  

可能重复:
  How to break out of multiple loops in Python?

是否有可能在Python中突破两个 for 循环? 即

for i in range(1,100):  
    for j in range(1,100):  
        break ALL the loops!

6 个答案:

答案 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,这个   被两个问题所抵消:

     
      
  1. 永久性地增加了语言的复杂性。这不仅会影响所有Python实现,还会影响每个源分析工具,   当然还有该语言的所有文档。

  2.   
  3. 我期望该功能会被滥用,而不是正确使用,导致代码清晰度净减少(测量到   今后编写的所有Python代码)。懒惰的程序员无处不在,   在你知道它之前,你的手上有一个令人难以置信的混乱   无法理解的代码。

  4.   

答案 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发布的内容类似于我正在尝试的内容。