Maison > développement back-end > Tutoriel Python > En quoi le mot clé « nonlocal » de Python diffère-t-il de « global » dans la portée des fonctions imbriquées ?

En quoi le mot clé « nonlocal » de Python diffère-t-il de « global » dans la portée des fonctions imbriquées ?

DDD
Libérer: 2024-12-19 22:05:11
original
976 Les gens l'ont consulté

How Does Python's `nonlocal` Keyword Differ from `global` in Nested Function Scope?

La puissance du « non local » dans Python 3

En programmation Python, les variables peuvent être classées en fonction de leur portée :

  • Global : Accessible dans tout le programme, y compris les imbriqués fonctions.
  • Local :Défini et accessible uniquement dans une fonction ou un bloc spécifique.

Cependant, vous devez parfois combler le fossé entre ces étendues. C'est là que le mot-clé "nonlocal" entre en jeu.

Comprendre "nonlocal"

"nonlocal" est utilisé dans Python 3 pour déclarer une variable qui existe dans un portée plus large mais n’est pas déclarée comme globale. Il vous permet d'accéder et de modifier les variables des fonctions incluses sans affecter les variables globales du même nom.

Impact de "nonlocal"

Pour illustrer la différence, considérons l'exemple suivant sans "nonlocal":

x = 0
def outer():
    x = 1
    def inner():
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)
Copier après la connexion

Sortie :

inner: 2
outer: 1
global: 0
Copier après la connexion

Dans ce cas, la variable x dans la fonction inner() est considérée comme une nouvelle variable locale, indépendante du x dans la fonction external() et du x global.

Maintenant, modifions le code en utilisant "nonlocal":

x = 0
def outer():
    x = 1
    def inner():
        nonlocal x
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)
Copier après la connexion

Sortie :

inner: 2
outer: 2
global: 0
Copier après la connexion

Dans ce scénario, le mot-clé "nonlocal" permet à la variable x dans la fonction inner() de référencer et de modifier la variable x dans la fonction external(). Les modifications apportées au sein de la fonction inner() persistent dans la fonction external().

Différence avec "global"

"nonlocal" diffère du mot-clé "global" en ce sens qu'il permet l'accès et la modification des variables à partir des portées fermées, tandis que "global" accède et modifie les variables à partir de la portée véritablement globale.

Utiliser "global" dans l'exemple ci-dessus donnerait le résultat suivant :

inner: 2
outer: 1
global: 2
Copier après la connexion

Dans ce cas, la variable x dans la fonction inner() serait liée au x global et tout changement affecterait la valeur du global variable, plutôt que celle de la fonction external().

Conclusion

"nonlocal" fournit un mécanisme puissant pour accéder et modifier les variables de portées fermées dans Python 3. Il vous permet d'éviter les pièges liés à la modification de variables globales dans des fonctions imbriquées et de maintenir une structure de code plus organisée et modulaire.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal