这是一个非常简短的版本:
创建一个名为
break_out_nested.py的文件。
import itertools
import sys
it = sys.modules[__name__]
def bol(*args):
condi = args[-1]
i = args[:-1]
for p in itertools.product(*i):
if condi():
return
yield p
现在你只需要几行代码就可以跳出嵌套循环(来自Rafiq示例的数据)
from break_out_nested import it, bol
it.i, it.j, it.k = 1, 1, 1
def cond(): return it.i % 3 == 0 and it.j % 3 == 0 and it.k % 3 == 0
for it.i, it.j, it.k in bol(range(1, 6, 1), range(1, 11, 2, ), range(1, 21, 4), cond):
print(it.i, it.j, it.k)
更多示例:
def cond(): return it.i + it.j + it.k == 777
it.i, it.j, it.k = 0, 0, 0
for it.i, it.j, it.k in bol(range(100), range(1000), range(10000), cond):
print(it.i, it.j, it.k)
def cond(): return it.i + it.j + it.k >= 100000
it.i, it.j, it.k = 0, 0, 0
for i, j, k in bol(range(100), range(1000), range(10000), cond):
it.i, it.j, it.k = i * 10, j * 100, k * 100
print(it.i, it.j, it.k)
goto
语句会非常方便。 - Drake Johnsontry
except
块中,并通过引发异常来跳出循环。在我看来,这是最易读的方法。 - undefined