[英]How to stop python recursion
我創建了一個遞歸搜索文件的函數,我希望它在找到第一個文件時停止遞歸:
def search_file(path):
for name in os.listdir(path):
sub = os.path.join(path, name)
if os.path.isfile(sub):
return sub#And break recursion
else:
search_file(sub)
返回一個標志,指出是否找到了該文件。 當您調用search_file
,如果返回值為True則返回。
你很親密 當你找到文件時,你已經打破了遞歸,問題是你沒有在鏈中一直推進這個結果。 一個位置很好的打印聲明會顯示出錯的地方。
import os
def search_file(path):
for name in os.listdir(path):
sub = os.path.join(path, name)
print('peek at: {}'.format(sub))
if os.path.isfile(sub):
return sub#And break recursion
else:
sub = search_file(sub)
if sub:
return sub
print(search_file('a'))
請注意,您需要能夠返回false條目,以防它一直向下循環而不會發現任何內容。 但是,如果在沒有檢查下一個子目錄的情況下在一個子目錄中找不到任何內容,則不希望中斷for循環。 返回將退出函數,返回結果而不必輸入中斷。
def search_file(path):
Initialize results to no file found
val = False
sub = None
for name in os.listdir(path):
sub = os.path.join(path, name)
val = os.path.isfile(sub):
if val:
return val, sub #And break recursion
else:
#check the subdirectory.
val, sub = search_file(sub)
# Break out if a valid file was found.
if val:
return val, sub
# No files found for this directory, return a failure
return val, sub
另一方面,如果您只想要一次返回,則可以按如下方式使用中斷
def search_file(path):
Initialize results to No file found
val = False
sub = None
for name in os.listdir(path):
sub = os.path.join(path, name)
val = os.path.isfile(sub):
if val:
break # break out of the for loop and return
else:
#check the subdirectory.
val, sub = search_file(sub)
# Break out if a valid file was found.
if val:
break
# Return the True or False results
return val, sub
我看到一個問題是無法將一次除None
之外的值返回到else:
語句中。 您能否提供更詳細的信息來描述您的目標?
完成任務時無法簡單地退出遞歸。 在繼續之前必須關閉每個打開的遞歸步驟。 該函數必須向其調用者返回一些內容( None
或值)。
我想象這是一個將值設置為屬性的類方法,因為一旦遞歸開始它就不會返回任何內容。 這是我在實例中要做的事情,這是一個類方法 。
def search_file(self, path):
for name in os.listdir(path):
sub = os.path.join(path, name)
if os.path.isfile(sub):
self.random_attr = sub
return True #And break recursion
elif search_file(sub):
break
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.