Python 中的命名循环

新手上路,请多包涵

我最近读到 这个问题,它有一个关于在 Java 中标记循环的解决方案。

我想知道 Python 中是否存在这样的循环命名系统。我多次遇到这样的情况,我确实需要从内部 for 循环中跳出外部 for --- 循环。通常,我通过将内部循环放在一个返回(以及其他)用作中断条件的布尔值的函数中来解决这个问题。但是为中断标记循环似乎要简单得多,如果 python 中存在这样的功能,我想尝试一下。

有谁知道它是否如此?

原文由 inspectorG4dget 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 503
2 个回答

有人提议在 python PEP3136 中包含命名循环,但是被拒绝并在 此处 进行了解释。拒绝的主要原因是在极少数情况下,通过包含此构造可以提高代码的可读性。

原文由 GWW 发布,翻译遵循 CC BY-SA 3.0 许可协议

下面是使用上下文管理器打破多个嵌套块的方法:

 import contextlib

@contextlib.contextmanager
def escapable():
    class Escape(RuntimeError): pass
    class Unblock(object):
        def escape(self):
            raise Escape()

    try:
        yield Unblock()
    except Escape:
        pass

您可以使用它来跳出多个循环:

 with escapable() as a:
    for i in xrange(30):
        for j in xrange(30):
            if i * j > 6:
                a.escape()

你甚至可以嵌套它们:

 with escapable() as a:
    for i in xrange(30):
        with escapable() as b:
            for j in xrange(30):
                if i * j == 12:
                    b.escape()  # Break partway out
                if i * j == 40:
                    a.escape()  # Break all the way out

原文由 Stu Gla 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题