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
Barbara Streisandoriginal
2024-12-16 12:06:15374parcourir

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

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

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

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