Maison >développement back-end >Tutoriel Python >Pourquoi la réaffectation d'une variable dans une fonction Python provoque-t-elle une UnboundLocalError ?
Comprendre UnboundLocalError lors de la réaffectation d'une variable dans une fonction
Lorsqu'une variable est définie en dehors d'une fonction, elle est considérée comme une variable globale et est accessible au sein de la fonction. Cependant, si une variable est redéfinie au sein d'une fonction, elle devient une variable locale et prime sur la variable globale. Cela peut conduire à l'erreur "UnboundLocalError" lorsque vous essayez d'accéder à la variable globale du même nom.
Dans l'exemple fourni :
a, b, c = (1, 2, 3) def test(): print(a) print(b) print(c) c += 1
Lorsque ce code est exécuté, les variables a , b et c sont définis globalement. Dans la fonction de test, les lignes print(a), print(b) et print(c) impriment avec succès les valeurs des variables globales.
Cependant, lorsque la ligne c = 1 n'est pas commentée, elle essaie pour réaffecter la valeur de c dans la fonction de test. Cela crée une nouvelle variable locale c et lui attribue la valeur 4. Par conséquent, lorsque la ligne print(c) est exécutée, elle fait référence à la variable locale c et non à la variable globale c. Étant donné que la variable locale c n'a pas reçu de valeur avant d'être référencée, l'erreur "UnboundLocalError" est générée.
Pour éviter cette erreur, vous pouvez utiliser le mot-clé global avant le nom de la variable dans la fonction pour explicitement indiquez que vous souhaitez accéder à la variable globale. Par exemple, le code ci-dessous fonctionnera correctement :
a, b, c = (1, 2, 3) def test(): global c print(a) print(b) print(c) c += 1
Dans ce cas, lorsque la fonction de test est exécutée, l'instruction globale c garantit que la variable c dans la fonction fait référence à la variable globale c et non une variable locale. Par conséquent, la ligne print(c) imprimera la valeur correcte de la variable globale 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!