Python における再帰関数と何も返さない [重複]
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 中国語 Web サイトの他の関連記事を参照してください。