for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
在一般情况下,当您有多个循环级别且break
对您不起作用时(因为您要继续上一个循环,而不是当前循环的右上循环),可以执行以下操作之一
将您想转义的循环重构为一个函数
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
缺点是您可能需要将以前在范围内的一些变量传递给该新函数。您既可以将它们作为参数传递,也可以在对象上使它们成为实例变量(如果有意义,仅为此函数创建一个新对象),或者全局变量,单例(无论是什么)(ehm,ehm)。
或者,您可以将其定义inner
为嵌套函数,然后使其仅捕获所需的内容(可能会更慢?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
使用例外
从哲学上讲,这就是例外,在必要时,通过结构化的编程构建块(如果是,为时,为时)中断程序流。
这样做的好处是您不必将单个代码分成多个部分。如果这是您在用Python编写代码时正在设计的某种计算,那么这很好。在早期引入抽象可能会使您减速。
这种方法的坏处在于,解释器/编译器作者通常会认为异常是例外情况,因此会相应地对其进行优化。
class ContinueI(Exception):
pass
continue_i = ContinueI()
for i in ...:
try:
for j in ...:
for k in ...:
if something:
raise continue_i
except ContinueI:
continue
为此创建一个特殊的异常类,这样您就不会冒意外地使某些其他异常消失的风险。
完全其他的东西
我相信还有其他解决方案。