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)
Sortie :
inner: 2 outer: 1 global: 0
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)
Sortie :
inner: 2 outer: 2 global: 0
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)
Sortie :
inner: 2 outer: 1 global: 2
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!