Comment puis-je éviter les exceptions \'NameError\' lors de la déclaration directe de fonctions en Python ?

Barbara Streisand
Libérer: 2024-10-27 12:59:30
original
320 Les gens l'ont consulté

How can I avoid

Éviter les erreurs de nom lors de la déclaration directe de fonctions en Python

Python suit une règle stricte selon laquelle les fonctions doivent être définies avant leur utilisation. Cependant, il existe des scénarios dans lesquels cette commande pourrait ne pas être réalisable. Cet article explore une technique pour déclarer en avant des fonctions et éviter les exceptions "NameError" lorsqu'il s'agit de fonctions définies plus loin dans le code.

Fonctions de déclaration avant

Malheureusement, Python n'a pas de syntaxe explicite pour les fonctions de déclaration directe. Cependant, il existe une solution de contournement qui peut obtenir un effet similaire.

Enveloppement de fonctions

La technique consiste à envelopper l'invocation de fonction dans une fonction distincte, en garantissant que la définition de la fonction appelée précède son utilisation dans le wrapper. Prenons l'exemple :

<code class="python">def spam():
    if end_condition():
        return end_result()
    else:
        return eggs()

def eggs():
    if end_condition():
        return end_result()
    else:
        return spam()</code>
Copier après la connexion

Dans ce cas, nous pourrions définir une fonction wrapper comme suit :

<code class="python">def my_wrapper():
    return spam()</code>
Copier après la connexion

En encapsulant l'invocation de spam() dans my_wrapper(), nous pouvons assurez-vous que la définition de spam() est disponible avant son utilisation.

Principe général

Le principe général est d'encapsuler l'invocation de la fonction déclarée dans un autre fonction. De cette façon, l'interpréteur Python peut résoudre l'appel à la fonction wrapper et trouver la définition de la fonction invoquée, même si elle est définie plus tard dans le code.

Exemple : Tri avec une fonction de comparaison personnalisée

Considérons l'exemple original dans lequel nous souhaitons trier une liste à l'aide d'une fonction de comparaison personnalisée cmp_configs, qui est définie après le tri.

<code class="python">mylist = [1, 5, 2, 4, 3]

def cmp_configs(x, y):
    # Custom comparison logic

print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))</code>
Copier après la connexion

Pour éviter l'erreur "NameError", nous pouvons envelopper l'invocation de tri dans une fonction :

<code class="python">def sort_list():
    print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))

sort_list()

def cmp_configs(x, y):
    # Custom comparison logic</code>
Copier après la connexion

Cela garantit que la définition de cmp_configs() est disponible avant son utilisation dans la fonction wrapper sort_list(), nous permettant de trier la liste sans rencontrer de problème. Exception "NameError".

Conclusion

Bien que Python nécessite que les fonctions soient définies avant leur utilisation, l'encapsulation des invocations nous permet de déclarer les fonctions en avant et d'éviter les exceptions "NameError". . Cette technique est particulièrement utile lorsqu'il s'agit de récursivité ou d'autres scénarios dans lesquels la réorganisation du code pour appliquer l'ordre de définition n'est pas réalisable.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!