Modification de variables dans une portée englobante non globale en Python
Lorsque vous travaillez avec des fonctions imbriquées, il est souvent nécessaire d'accéder et de modifier les variables définies dans une portée englobante qui n’est ni globale ni accessible via une portée dynamique. Cela peut présenter des défis en Python, qui implémente la portée lexicale.
Considérez l'exemple suivant :
def A(): b = 1 def B(): # Can access 'b' but cannot modify it directly print(b) B() A()
Dans ce code, la variable b est définie dans la portée englobante de B(). fonction. Cependant, tenter de modifier b directement dans B() entraîne une UnboundLocalError car il n'est pas déclaré comme local à B().
Pour résoudre ce problème, Python propose deux solutions :
Python 3 :Utiliser le mot-clé nonlocal
Sur Python 3, le mot-clé nonlocal permet de modifier les variables au plus proche portée englobante excluant les variables globales. Voici comment l'utiliser :
def foo(): a = 1 def bar(): nonlocal a a = 2 bar() print(a) # Output: 2
Dans cet exemple, le mot-clé nonlocal crée une variable non locale au sein de la fonction bar(), permettant sa modification.
Python 2 :Utiliser des objets mutables
Sur Python 2, où nonlocal n'est pas disponible, vous pouvez utiliser des objets mutables, tels que des listes ou dictionnaires. Au lieu de réaffecter les variables, vous pouvez muter la valeur de l'objet :
def foo(): a = [] def bar(): a.append(1) bar() bar() print(a) # Output: [1, 1]
Ici, la variable a est mutable et la fonction bar() peut modifier ses valeurs en l'ajoutant à la liste.
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!