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

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