Les fonctions imbriquées peuvent-elles modifier les variables dans les étendues englobantes en Python ?

Susan Sarandon
Libérer: 2024-10-21 18:40:03
original
364 Les gens l'ont consulté

Can Nested Functions Modify Variables in Enclosing Scopes in 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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!