Maison > développement back-end > Tutoriel Python > Comment puis-je modifier des variables non globales dans les étendues externes en Python ?

Comment puis-je modifier des variables non globales dans les étendues externes en Python ?

Barbara Streisand
Libérer: 2024-12-16 12:06:15
original
386 Les gens l'ont consulté

How Can I Modify Non-Global Variables in Outer Scopes in Python?

Modification de variables non globales dans la portée externe en Python

En Python, les variables d'une fonction appartiennent généralement à la portée locale, à moins qu'elles ne soient explicitement déclarées comme globales. Cependant, il est parfois nécessaire de modifier des variables définies dans un scope externe (englobant) mais non global. Cette question explore comment y parvenir.

Étant donné l'exemple de code :

def A():
    b = 1
    def B():
        # Access to 'b' is possible here.
        print(b)
        # Direct modification of 'b' fails.
    B()
A()
Copier après la connexion

La variable b dans la fonction B réside dans une portée englobante non globale. Les tentatives de modification de b entraînent directement une UnboundLocalError. Le mot-clé global ne peut pas être utilisé car b n'est pas déclaré au niveau global.

Solution Python 3 :

La portée non locale (Python 3.x) peut être utilisé pour résoudre ce problème :

def A():
    b = 1
    def B():
        nonlocal b  # Nonlocal keyword
        b = 2
    B()
    print(b)  # Output: 2
A()
Copier après la connexion

Python 2 Solution :

Objets mutables (Python 2.x) :

Au lieu de réaffecter directement les variables, utilisez des objets mutables (par exemple, des listes, des dicts) et modifiez leurs valeurs :

def A():
    b = []
    def B():
        b.append(1)  # Mutation of 'b'
    B()
    B()
    print(b)  # Output: [1, 1]
A()
Copier après la connexion

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