En Python, les variables d'une fonction appartiennent généralement à la portée locale, à moins qu'elles ne soient explicitement déclarées comme globales. Cependant, il est parfois nécessaire de modifier des variables définies dans un scope externe (englobant) mais non global. Cette question explore comment y parvenir.
Étant donné l'exemple de code :
def A(): b = 1 def B(): # Access to 'b' is possible here. print(b) # Direct modification of 'b' fails. B() A()
La variable b dans la fonction B réside dans une portée englobante non globale. Les tentatives de modification de b entraînent directement une UnboundLocalError. Le mot-clé global ne peut pas être utilisé car b n'est pas déclaré au niveau global.
Solution Python 3 :
La portée non locale (Python 3.x) peut être utilisé pour résoudre ce problème :
def A(): b = 1 def B(): nonlocal b # Nonlocal keyword b = 2 B() print(b) # Output: 2 A()
Python 2 Solution :
Objets mutables (Python 2.x) :
Au lieu de réaffecter directement les variables, utilisez des objets mutables (par exemple, des listes, des dicts) et modifiez leurs valeurs :
def A(): b = [] def B(): b.append(1) # Mutation of 'b' B() B() print(b) # Output: [1, 1] A()
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!