Python:打破for循环调用函数

时间:2015-04-15 13:39:12

标签: python

我需要根据调用函数后获得的结果打破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循环),我想重新检查这样的事情是否可行。

2 个答案:

答案 0 :(得分:6)

不,它(合理地)不可能。我猜你可以引发异常,但是你必须在循环外用try / except语句来捕获它。

由于OP已经表达了对此的好奇心,我将解释为什么 Python不允许你这样做。函数应该是composable个元素。它们意味着在不同的环境中工作。

允许函数突破循环有两个不同的问题:

  1. 客户端代码可能不会发生此行为。
  2. 如果没有循环怎么办?
  3. 对于(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...