我需要根据调用函数后获得的结果打破for
循环。这是我所追求的一个例子(显然不起作用):
def break_out(i):
# Some condition
if i > 10:
# This does not work.
return break
for i in range(1000):
# Call function
break_out(i)
当然这是非常简单的 MWE
,我的实际功能要大得多,这就是为什么我把它移到for
循环之外。
This answer说这是不可能的,我应该让函数返回一个布尔值,并在if
循环中添加一个for
语句来决定。
因为它是一个相当古老的问题并且它没有受到太多关注(同样,它也适用于while
循环),我想重新检查这样的事情是否可行。
答案 0 :(得分:6)
不,它(合理地)不可能。我猜你可以引发异常,但是你必须在循环外用try
/ except
语句来捕获它。
由于OP已经表达了对此的好奇心,我将解释为什么 Python不允许你这样做。函数应该是composable个元素。它们意味着在不同的环境中工作。
允许函数突破循环有两个不同的问题:
对于(1),如果我读了这样的代码:
import foo # some library I didn't write
while condition:
foo.bar()
assert not condition
我合理地假设断言不会触发。但如果foo.bar()
能够突破循环,那就可以。
对于(2),也许我在其他地方写了这个:
if condition:
foo.bar()
如果foo.bar()
试图突破循环,那么应该做些什么并不清楚,因为没有循环。
答案 1 :(得分:1)
而不是return break
,返回一个强制中断条件的值。扩展你的例子:
def break_out(i):
# Some condition
return i > 10 # Returns `True` if you should break from loop.
for i in range(1000):
# Call function
if break_out(i):
break
# Insert the rest of your code here...