Maison >développement back-end >Tutoriel Python >Pourquoi « counter = 1 » à l'intérieur d'une fonction Python provoque-t-il une « UnboundLocalError » ?
UnboundLocalError expliqué dans les fermetures Python
La situation décrite dans la question tourne autour d'un concept fondamental en Python connu sous le nom de portée variable. Contrairement aux langages avec des déclarations de variables explicites, Python détermine la portée des variables en fonction de l'affectation.
Considérez le code suivant :
counter = 0 def increment(): counter += 1 increment()
Ce code génère une UnboundLocalError. Pourquoi ?
En Python, une affectation au sein d'une fonction marque la variable comme locale à cette fonction. La ligne compteur = 1 dans la fonction incrément() implique que le compteur est une variable locale. Cependant, cette ligne tente d'accéder à la variable locale avant qu'elle ne soit affectée, ce qui conduit à l'erreur UnboundLocalError.
Pour contourner ce problème, vous disposez de plusieurs options :
counter = 0 def increment(): global counter counter += 1
def outer(): counter = 0 def inner(): nonlocal counter counter += 1
En utilisant ces techniques, vous pouvez manipuler correctement les variables locales et globales dans les fermetures, en évitant erreurs inutiles.
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!