Maison >développement back-end >Tutoriel Python >Les fonctions imbriquées peuvent-elles modifier les variables dans les étendues englobantes en Python ?
Variables locales non liées dans les étendues de fonctions imbriquées
En Python, les fonctions imbriquées accèdent aux variables définies dans leurs étendues englobantes, permettant la réutilisation et l'encapsulation du code. Cependant, tenter de modifier une variable dans une portée englobante au sein d'une fonction imbriquée peut entraîner une « UnboundLocalError » si la variable n'est pas déclarée comme non locale ou globale.
Considérez le code suivant :
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1</code>
Lorsque vous invoquez inner(), vous rencontrerez une "UnboundLocalError" car ctr n'est pas défini dans la fonction interne. Pour résoudre ce problème, vous pouvez utiliser les approches suivantes :
Pour Python 3 et versions ultérieures :
Utilisez le mot-clé non local
Le mot-clé nonlocal vous permet pour modifier les variables définies dans une portée englobante à partir d'une fonction imbriquée.
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1</code>
Pour Python 2 et versions antérieures :
Utiliser une structure de données pour contenir la variable
Dans Python 2, les fonctions imbriquées ne peuvent pas modifier les variables dans les étendues englobantes, vous devez donc utiliser une structure de données pour contenir la variable et la transmettre à la fonction imbriquée.
<code class="python">def outer(): ctr = [0] def inner(): ctr[0] += 1</code>
Remplacer toutes les occurrences de ctr dans votre code avec ctr[0].
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!