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)
PEP 3136中提出了几种解决方案,但 BDFL拒绝了它:
我拒绝它的基础是代码如此复杂以至于需要这个功能是非常罕见的。在大多数情况下,现有的变通方法可以生成干净的代码,例如使用“return”。虽然我确信在某些(罕见的)真实情况下,代码的清晰度会受到重构的影响,从而可以使用 return,但这被两个问题所抵消:
永久性地增加了语言的复杂性。这不仅会影响所有 Python 实现,还会影响每个源代码分析工具,当然还有该语言的所有文档。
我预计该功能将被滥用而不是正确使用,从而导致代码清晰度的净下降(在此后编写的所有 Python 代码中进行测量)。懒惰的程序员无处不在,在不知不觉中,你手上的难懂代码已经一团糟。