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

En quoi le mot clé « nonlocal » de Python diffère-t-il de « global » dans la modification des variables ?

Linda Hamilton
Libérer: 2024-12-21 04:59:13
original
979 Les gens l'ont consulté

How Does Python's `nonlocal` Keyword Differ from `global` in Modifying Variables?

Comprendre « non local » dans Python 3

Contrairement aux langages traditionnels, Python permet aux fonctions imbriquées d'accéder aux variables définies dans leurs portées externes. Cependant, l'accès à des variables qui ne sont pas déclarées dans la fonction imbriquée (c'est-à-dire des variables non locales) peut entraîner un comportement inattendu.

Le mot clé "non local"

Dans Python 3, le mot-clé "nonlocal" permet de modifier des variables déclarées dans une portée externe depuis une fonction imbriquée. En utilisant "nonlocal", vous déclarez que la variable que vous modifiez est non locale et appartient à une portée externe.

Comment fonctionne "nonlocal"

Considérez le code suivant sans utiliser "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 cet exemple, la variable x dans la fonction interne masque la variable x de la fonction externe, ce qui entraîne l'attribution de la valeur 2 à x dans la fonction interne. La variable x de la fonction externe n'est pas affectée.

Utilisation de "nonlocal"

Pour modifier la variable x de la fonction externe à partir de la fonction interne, nous pouvons utiliser "nonlocal" comme suit :

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 cas, le Le mot-clé "nonlocal" permet à la fonction interne d'accéder et de modifier la variable x de la fonction externe. En conséquence, la valeur de x dans la fonction externe est modifiée en 2.

Comparaison avec "global"

Contrairement à "nonlocal", le mot-clé "global" fait référence à une variable qui appartient à la portée globale. L'utilisation de "global" lierait la variable dans la fonction interne à la variable globale, quelle que soit la présence d'autres variables locales portant le même nom :

x = 0

def outer():
    x = 1

    def inner():
        global x
        x = 2
        print("inner:", x)

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

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

Sortie :

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

Par conséquent, "nonlocal" doit être utilisé lorsque vous souhaitez modifier une variable déclarée dans une portée externe, tandis que "global" doit être utilisé lors de l'accès à une variable depuis la portée globale.

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