Maison  >  Article  >  développement back-end  >  Comment accéder aux variables non locales à partir de fonctions imbriquées en Python ?

Comment accéder aux variables non locales à partir de fonctions imbriquées en Python ?

DDD
DDDoriginal
2024-10-21 18:38:29825parcourir

How to Access Nonlocal Variables from Nested Functions in Python?

Accès aux variables non locales dans les étendues de fonctions imbriquées

En Python, les étendues de fonctions imbriquées donnent accès aux étendues englobantes. Cependant, tenter de modifier une variable dans une portée englobante au sein d'une fonction imbriquée peut entraîner une UnboundLocalError.

Pour résoudre ce problème, vous disposez de plusieurs options :

1. Utilisation du mot-clé 'nonlocal' (Python 3) :

Pour Python 3 et versions ultérieures, le mot-clé nonlocal vous permet de relier des variables non locales dans des fonctions imbriquées.

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1

    inner()</code>

2. Accès indirect via des listes (Python 2 et 3) :

Dans Python 2 et 3, vous pouvez utiliser une liste pour contenir la variable et l'incrémenter indirectement dans la fonction imbriquée.

<code class="python">ctr = [0]

def inner():
    ctr[0] += 1</code>

3. Utilisation de variables globales (non recommandées) :

Bien que l'utilisation de global puisse permettre l'accès aux variables à partir des étendues englobantes, elle est généralement déconseillée en raison de conflits potentiels et de problèmes de lisibilité du code.

<code class="python">def outer():
    global ctr
    ctr = 0

    def inner():
        ctr += 1</code>

Le choix de la solution appropriée dépend de votre version spécifique de Python et des considérations de conception de votre code.

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!

Déclaration:
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