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 weitergibt und schließlich den Pfad an den Aufrufer zurückgibt.
Alternativ kann das Problem auch dadurch behoben werden, dass der else-Block entfernt wird und immer am Ende der for-Schleife zurückgekehrt wird:
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 konsequente Rückgabe von Als rekursives Ergebnis kann die Funktion nun den Pfad zur gewünschten Datei korrekt abrufen und zurückgeben.
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!