Maison > développement back-end > Tutoriel Python > Comment puis-je modifier des variables dans une portée englobante non globale en Python ?

Comment puis-je modifier des variables dans une portée englobante non globale en Python ?

Susan Sarandon
Libérer: 2024-12-28 05:01:09
original
585 Les gens l'ont consulté

How Can I Modify Variables in a Non-Global, Enclosing Scope in Python?

Modification de variables dans une portée englobante non globale en Python

Lorsque vous travaillez avec des fonctions imbriquées, il est souvent nécessaire d'accéder et de modifier les variables définies dans une portée englobante qui n’est ni globale ni accessible via une portée dynamique. Cela peut présenter des défis en Python, qui implémente la portée lexicale.

Considérez l'exemple suivant :

def A():
    b = 1
    def B():
        # Can access 'b' but cannot modify it directly
        print(b)
    B()
A()
Copier après la connexion

Dans ce code, la variable b est définie dans la portée englobante de B(). fonction. Cependant, tenter de modifier b directement dans B() entraîne une UnboundLocalError car il n'est pas déclaré comme local à B().

Pour résoudre ce problème, Python propose deux solutions :

Python 3 :Utiliser le mot-clé nonlocal

Sur Python 3, le mot-clé nonlocal permet de modifier les variables au plus proche portée englobante excluant les variables globales. Voici comment l'utiliser :

def foo():
    a = 1
    def bar():
        nonlocal a
        a = 2
    bar()
    print(a)  # Output: 2
Copier après la connexion

Dans cet exemple, le mot-clé nonlocal crée une variable non locale au sein de la fonction bar(), permettant sa modification.

Python 2 :Utiliser des objets mutables

Sur Python 2, où nonlocal n'est pas disponible, vous pouvez utiliser des objets mutables, tels que des listes ou dictionnaires. Au lieu de réaffecter les variables, vous pouvez muter la valeur de l'objet :

def foo():
    a = []
    def bar():
        a.append(1)
    bar()
    bar()
    print(a)  # Output: [1, 1]
Copier après la connexion

Ici, la variable a est mutable et la fonction bar() peut modifier ses valeurs en l'ajoutant à la liste.

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.cn
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