跳出两个循环

12 投票
6 回答
20731 浏览
提问于 2025-04-17 11:14

可能是重复的问题:
如何在Python中跳出多个循环?

在Python中,有办法同时跳出两个for循环吗?
也就是说:

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

6 个回答

2

另一种选择是:在内层循环中使用一个标志变量,当你使用break语句时,把这个变量设置为True。然后你可以用这个标志来控制外层循环的break

5

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

我拒绝这个提案是因为,代码复杂到需要这个功能的情况非常少见。在大多数情况下,有现成的替代方法可以写出清晰的代码,比如使用 'return'。虽然我相信确实有一些(少见的)真实案例,重构代码以便使用 return 可能会影响代码的清晰度,但这有两个问题:

  1. 这会给语言增加复杂性,而且是永久性的。这不仅影响所有的Python实现,还会影响每一个源代码分析工具,当然也包括所有的语言文档。

  2. 我担心这个功能会被滥用,而不是被正确使用,导致代码的清晰度整体下降(在今后所有编写的Python代码中衡量)。懒惰的程序员到处都是,没过多久,你就会发现手头的代码变得一团糟,完全看不懂。

36

不,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

撰写回答