Rekursive Funktionen und die Rückgabe von „Keine“ in Python [Duplikat]
In Python können rekursive Funktionen ein wirksames Werkzeug zur Lösung komplexer Probleme sein. Es ist jedoch wichtig, die Mechanismen der Rekursion zu verstehen, um unerwartete Ergebnisse zu vermeiden.
Bedenken Sie den folgenden Codeausschnitt:
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)
Diese Funktion zielt darauf ab, den Pfad zu einer bestimmten Datei innerhalb einer verschachtelten Datei zurückzugeben Wörterbuch. Bei der Ausführung tritt jedoch das Problem auf, dass None anstelle des erwarteten Pfads zurückgegeben wird.
Das Problem liegt in der Handhabung des rekursiven Aufrufs. Um die Rekursion korrekt zu implementieren, muss das Ergebnis des rekursiven Aufrufs an die aufrufende Funktion zurückgegeben werden. In diesem Fall sollte dies innerhalb des else-Blocks erfolgen:
else: return get_path(directory[filename], rqfile, path)
Dadurch wird sichergestellt, dass die Funktion das Ergebnis zurück in die rekursive Kette weiterleitet und schließlich den Pfad an den Aufrufer zurückgibt.
Alternativ kann das Problem auch durch Entfernen des else-Blocks und immer eine Rückkehr am Ende der for-Schleife behoben werden:
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)
Durch die konsistente Rückgabe des rekursiven Ergebnisses kann die Funktion nun den Pfad korrekt abrufen und zurückgeben die gewünschte Datei.
Das obige ist der detaillierte Inhalt vonWarum gibt meine rekursive Python-Funktion „Keine' anstelle des erwarteten Pfads zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!