如何解决Python:在外循环中继续下一次迭代
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()
使用例外
从哲学上讲,这就是例外的用途,在必要时通过结构化编程构建块(if、for、while)打破程序流程。
优点是您不必将单段代码分成多个部分。如果它是您在用 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
为此创建一个特殊的异常类,这样您就不会冒着意外使其他异常静音的风险。
完全不同的东西
我相信还有其他解决方案。
解决方法
我想知道是否有任何内置方法可以继续在 python 的外循环中进行下一次迭代。例如,考虑以下代码:
for ii in range(200):
for jj in range(200,400):
...block0...
if something:
continue
...block1...
我希望这个 continue 语句退出 jj 循环并转到 ii
循环中的下一项。我可以通过其他方式实现这个逻辑(通过设置标志变量),但是有没有简单的方法可以做到这一点,或者这就像要求太多?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。