Maison >développement back-end >Tutoriel Python >Pourquoi ma fonction Python récursive ne renvoie-t-elle aucun résultat lors de la recherche d'un fichier dans un dictionnaire imbriqué ?

Pourquoi ma fonction Python récursive ne renvoie-t-elle aucun résultat lors de la recherche d'un fichier dans un dictionnaire imbriqué ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 08:29:02626parcourir

Why Does My Recursive Python Function Return None When Searching for a File in a Nested Dictionary?

Fonction récursive ne renvoyant aucun en Python

Question

Dans le code Python fourni, une fonction récursive nommée get_path tente de rechercher un fichier ( rqfile) dans un dictionnaire imbriqué (dictionnaire). Cependant, lorsque le chemin d'accès au fichier est trouvé et doit être renvoyé, la fonction renvoie Aucun. Le code est le 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)

Solution

Pour résoudre ce problème, la fonction doit renvoyer le résultat de l'appel récursif. Par défaut, les fonctions Python renvoient None s'il n'y a pas d'instruction return explicite. Pour renvoyer le bon chemin, remplacez la dernière ligne de la fonction par ce qui suit :

return get_path(directory[filename], rqfile, path)

Cette modification garantit que la fonction renvoie le chemin trouvé lors de l'appel récursif. Voici le code mis à jour :

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:
            return get_path(directory[filename], rqfile, path)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn