打破两个循环

MBZ*_*MBZ 10 python loops for-loop

可能重复:
如何在Python中打破多个循环?

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

for i in range(1,100):  
    for j in range(1,100):  
        break ALL the loops!
Run Code Online (Sandbox Code Playgroud)

phi*_*hag 33

不,breakpython中没有嵌套语句.

相反,您可以简化您的功能,如下所示:

import itertools
for i,j in itertools.product(range(1, 100), repeat=2):
  break
Run Code Online (Sandbox Code Playgroud)

..或将代码放入自己的函数中,并使用return:

def _helper():
   for i in range(1,100):
       for j in range(1,100):
           return
_helper()
Run Code Online (Sandbox Code Playgroud)

..或使用例外:

class BreakAllTheLoops(BaseException): pass
try:
   for i in range(1,100):
       for j in range(1,100):
           raise BreakAllTheLoops()
except BreakAllTheLoops:
    pass
Run Code Online (Sandbox Code Playgroud)

..或者使用for-else-continue:

for i in range(1,100):
    for j in range(1,100):
       break
    else:
       continue
    break
Run Code Online (Sandbox Code Playgroud)

..或使用标志变量:

exitFlag = False
for i in range(1,100):
    for j in range(1,100):
        exitFlag = True
        break
    if exitFlag:
        break
Run Code Online (Sandbox Code Playgroud)


Rob*_*ers 5

PEP 3136中提出了几种解决方案,但 BDFL拒绝了它

我拒绝它的基础是代码如此复杂以至于需要这个功能是非常罕见的。在大多数情况下,现有的变通方法可以生成干净的代码,例如使用“return”。虽然我确信在某些(罕见的)真实情况下,代码的清晰度会受到重构的影响,从而可以使用 return,但这被两个问题所抵消:

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

  2. 我预计该功能将被滥用而不是正确使用,从而导致代码清晰度的净下降(在此后编写的所有 Python 代码中进行测量)。懒惰的程序员无处不在,在不知不觉中,你手上的难懂代码已经一团糟。