Fonctions récursives et renvoi d'aucun en Python [Dupliquer]
En Python, les fonctions récursives peuvent être un outil efficace pour résoudre des problèmes complexes. Cependant, il est important de comprendre les mécanismes de récursivité pour éviter des résultats inattendus.
Considérez l'extrait de code suivant :
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)
Cette fonction vise à renvoyer le chemin d'accès à un fichier spécifique dans un fichier imbriqué. dictionnaire. Cependant, une fois exécuté, le problème se pose qu'il renvoie None au lieu du chemin attendu.
Le problème réside dans la gestion de l'appel récursif. Pour implémenter correctement la récursion, le résultat de l'appel récursif doit être renvoyé à la fonction appelante. Dans ce cas, cela doit être fait dans le bloc else :
else: return get_path(directory[filename], rqfile, path)
Cela garantit que la fonction propage le résultat dans la chaîne récursive, renvoyant finalement le chemin à l'appelant.
Alternativement, supprimer le bloc else et toujours revenir à la fin de la boucle for peut également résoudre le problème :
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)
En renvoyant systématiquement le résultat récursif, la fonction peut désormais récupérer correctement et renvoyer le chemin d'accès au fichier souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!