Python 中的遞歸函數和傳回 None [重複]
在 Python 中,遞歸函數是解決複雜問題的有效工具。但是,了解遞歸機制以避免意外結果非常重要。
考慮以下程式碼片段:
def get_path(dictionary, rqfile, prefix=[]): for filename in dictionary.keys(): path = prefix + [filename] if not isinstance(dictionary[filename], dict): if rqfile in str(os.path.join(*path)): return str(os.path.join(*path)) else: get_path(directory[filename], rqfile, path)
此函數旨在傳回巢狀中特定檔案的路徑字典。然而,執行時會出現問題,它會返回 None 而不是預期的路徑。
問題在於遞歸呼叫的處理。為了正確實現遞歸,需要將遞歸呼叫的結果傳回給呼叫函數。在這種情況下,應該在 else 區塊內完成:
else: return get_path(directory[filename], rqfile, path)
這確保函數將結果傳播回遞歸鏈,最終將路徑傳回給呼叫者。
或者,刪除else 區塊並始終在for 循環末尾返回也可以解決該問題:
for filename in dictionary.keys(): path = prefix + [filename] if not isinstance(dictionary[filename], dict): if rqfile in str(os.path.join(*path)): return str(os.path.join(*path)) return get_path(directory[filename], rqfile, path)
透過一致返回遞歸結果,該函數現在可以正確檢索並返回到的路徑所需的文件。
以上是為什麼我的遞歸 Python 函數不回傳任何內容而不是預期的路徑?的詳細內容。更多資訊請關注PHP中文網其他相關文章!