簡體   English   中英

如何使用函數退出循環

[英]how can I use a function to exit for loop

我想寫一個函數來退出for循環。 通常,我們可以

for i in range(10):
    if i==8:
       break

我希望寫一個像這樣的函數,

def interrupt(i):
   if i == val:
      ...


for i in range(10):
   interrupt(i)

編輯

我理解機制以及為什么我現在不能這樣做。 出於好奇,python是否提供了類似'宏擴展'的東西,所以我實際上並沒有創建一個函數,而是一個重新編寫代碼塊的名稱?

你不能。 for循環繼續,直到在循環中直接遇到顯式break語句,或者直到迭代器引發StopIteration

您可以做的最好的事情是檢查interrupt的返回值或捕獲由interrupt引發的異常,並使用該信息來使用是否break

我不認為可以休息一下,你可以假裝它有點像這樣:

def interrupt(i):
    if i > 2:
        return True
    return False

for i in range(10):
    if interrupt(i):
        break

    #.. do loop stuff

以下代碼將解決您的問題:

def interrupt(i, pred=lambda x:x==8):
    if pred(i):
        raise StopIteration(i)

try:
    for i in range(10):
        interrupt(i)
except StopIteration as e:
    print('Exit for loop with i=%s' % e)

# output: Exit for loop with i=8

該方案很簡單,並且通常適用於任何類型的異常:

  1. 編寫一個函數foo() ,當一個或多個事件發生時,它會引發一個或多個異常
  2. 將調用插入try-except結構中的函數foo()
  3. 管理之外的異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM