Maison >développement back-end >Tutoriel Python >Pourquoi Python renvoie-t-il une « UnboundLocalError » lors de la modification d'une variable globale à l'intérieur d'une fonction ?

Pourquoi Python renvoie-t-il une « UnboundLocalError » lors de la modification d'une variable globale à l'intérieur d'une fonction ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-24 16:47:13864parcourir

Why Does Python Throw an `UnboundLocalError` When Modifying a Global Variable Inside a Function?

UnboundLocalError : l'affectation de variable a priorité sur la déclaration globale

Lorsque vous rencontrez une UnboundLocalError en Python, il est crucial de comprendre la priorité des affectations de variables sur les déclarations globales. Entrons dans les détails à l'aide du code fourni :

a, b, c = (1, 2, 3)

def test():
    print(a)
    print(b)
    print(c)
    c += 1
test()

Avant d'explorer l'erreur, abordons les impressions réussies de « a » et « b ». Pour ces variables, il n'y a aucune affectation dans la fonction 'test()', donc Python les traite comme des variables globales et récupère leurs valeurs de la portée externe.

Cependant, lors de l'attribution d'une valeur à 'c' dans la fonction (« c = 1 »), Python crée une variable locale nommée « c ». Cette variable locale éclipse le « c » global, et toute référence ultérieure à « c » dans la fonction fera référence à la version locale. Par conséquent, lorsque la ligne 'print(c)' est exécutée, elle tente d'imprimer la variable locale non attribuée, ce qui entraîne 'UnboundLocalError'.

Pour résoudre ce problème, on peut déclarer explicitement l'utilisation de la variable globale Variable 'c' dans la fonction 'test()' en ajoutant 'global c' comme première ligne. Alternativement, dans Python 3, « nonlocal c » peut être utilisé pour accéder à la portée de fonction englobante la plus proche qui contient une variable nommée « c ».

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