Maison >développement back-end >Tutoriel Python >Comment puis-je modifier des variables dans des étendues externes dans des fonctions Python imbriquées ?
Modifier des variables dans des étendues externes
L'encapsulation de fonctions est une pratique courante en Python, mais elle pose des défis lors de l'accès et de la modification de variables définies dans des étendues externes. portées. Cet article explique comment modifier des variables qui ne sont pas définies globalement mais qui existent dans une portée englobante.
Portée Python et résolution des variables
Python suit la portée lexicale, ce qui signifie que les variables sont résolus en fonction de leur emplacement dans le code source. Les étendues externes (fonctions englobantes) peuvent accéder aux variables définies dans leurs étendues imbriquées (fonctions internes), mais l'inverse n'est pas vrai. Tenter de modifier une variable dans une portée externe sans la déclarer comme globale génère une UnboundLocalError.
Modification des variables de portée externe
Dans Python 3, le mot-clé nonlocal fournit une solution . Il permet de modifier les variables dans les fonctions internes, même si elles sont définies dans des portées externes. Lorsqu'une variable est déclarée comme non locale, Python considère qu'elle est liée à la portée externe.
Exemple :
def outer(): a = 5 def inner(): nonlocal a a += 1 print(a) outer()
Sortie :
6
Solution de contournement Python 2
Pour Python 2, il n'y a pas d'équivalent direct à nonlocal. Cependant, il est possible d'obtenir le même effet en utilisant des objets mutables, tels que des listes ou des dictionnaires. En modifiant le contenu de l'objet mutable, la valeur de la variable dans la portée externe peut être indirectement modifiée.
Exemple :
def outer(): a = [] def inner(): a.append(1) inner() inner() print(a)
Sortie :
[1, 1]
En comprenant les règles de portée de Python et en utilisant les techniques appropriées, il est possible d'accéder et de modifier des variables dans des portées externes non globales, facilitant ainsi l'encapsulation et réalisant le programme souhaité. comportement.
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!