Maison > développement back-end > Tutoriel Python > Comment la règle LEGB de Python résout-elle les conflits de portée variable ?

Comment la règle LEGB de Python résout-elle les conflits de portée variable ?

Linda Hamilton
Libérer: 2024-12-27 06:55:09
original
887 Les gens l'ont consulté

How Does Python's LEGB Rule Solve Variable Scope Conflicts?

Règles de portée Python : une approche simplifiée

Comprendre les règles de portée Python peut prêter à confusion, en particulier pour les programmeurs intermédiaires. Cet article fournit une explication concise des principes fondamentaux qui régissent la résolution de noms en Python, connus sous le nom de règle LEGB.

Règle LEGB

La règle LEGB dicte l'ordre dans lequel Python recherche un nom de variable :

  1. L (Local): La fonction la plus interne ou lambda où la variable a été définie.
  2. E (Fonction englobante) : Toutes les fonctions ou lambdas englobantes, recherchant vers l'extérieur depuis le plus intérieur.
  3. G (Global) : L'espace de noms du module de niveau supérieur ou toute variable déclarée globale dans une fonction.
  4. B (Intégré) : Noms prédéfinis de la bibliothèque standard Python, tels que open, range ou SyntaxError.

Dans l'extrait de code donné :

class Foo:
    def spam():
        for code4:
            x()
Copier après la connexion

L'ordre de recherche LEGB pour la variable x serait :

  1. L : Dans la fonction spam (en code3, code4 et code5).
  2. E : Il n'y a pas de fonctions englobantes.
  3. G : Vérifiez s'il y a est n'importe quel x défini au niveau du module (dans le code1).
  4. B : Recherchez tout élément intégré x en Python.

Fonctions Lambda et portée

Les fonctions Lambda suivent également la règle LEGB. Cependant, accéder aux variables définies dans la portée environnante peut être délicat. Considérez :

y = 10

def outer():
    x = 20
    foo = lambda: x + y

foo()  # Error: 'y' is not defined
Copier après la connexion

Dans ce cas, lambda foo ne peut pas accéder à y car il est défini dans l'espace de noms de la fonction englobante, et non dans les espaces de noms globaux ou intégrés. Pour accéder à y, vous devez le déclarer explicitement comme non local dans le lambda :

y = 10

def outer():
    x = 20
    foo = lambda: nonlocal y + x

foo()  # Returns 30
Copier après la connexion

Conclusion

La règle LEGB fournit un moyen clair et cohérent de comprendre le nom Python résolution. Il simplifie la portée, permettant aux programmeurs de tracer et de déboguer plus facilement leur code. En comprenant ces règles, les développeurs peuvent éviter en toute confiance les erreurs de portée courantes et garantir que leurs applications Python sont robustes et maintenables.

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