Résumé :
- Fonction interne : peut accéder aux variables globales sans les modifier
- Fonction interne : si une variable globale du même nom est modifiée, Python la considérera comme une variable locale
- Appeler le nom de la variable (par exemple, print sum) avant de modifier la variable globale du même nom dans une fonction interne déclenche Unbound-LocalError
La variable sum définie dans le programme est une variable globale, mais il n'y a pas de définition de sum dans la fonction. Selon les règles de Python pour l'accès aux variables locales et globales : lors de la recherche d'une variable, Python la recherche d'abord dans la portée locale. Si la variable n'est pas trouvée dans la portée locale, Python cherche alors cette variable dans les variables globales. Si elle n'est pas trouvée, une exception est levée (NAMEERROR ou Unbound-LocalError, selon la version de Python.)
Si une fonction interne référence une variable du même nom provenant d'une fonction externe ou d'une variable globale, et modifie cette variable, alors Python la considérera comme une variable locale. De plus, comme il n'y a pas de définition ni d'affectation de sum dans la fonction, une erreur est signalée.
À partir des deux programmes suivants, le simple accès à une variable globale ou sa modification ne signale pas d'erreur~
Accéder à la variable globale :
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sum=5
def add(a=1,b=3):
print a,b
print sum #仅仅访问
add(4,8)
print sum
Le résultat de sortie est:
4 8 5 5
La modification d'une variable globale du même nom est traitée comme une variable locale :
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sum=5
def add(a=1,b=3):
print a,b
#内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量
sum=b+a #在函数内部修改
print sum
add(4,8)
Le résultat de sortie est:
4 8 12
Le programme suivant signalera une erreur car "si une fonction interne référence une variable du même nom provenant d'une fonction externe ou d'une variable globale, et modifie cette variable, alors Python la considérera comme une variable locale, et comme il n'y a pas de définition ni d'affectation de sum dans la fonction, elle signale donc une erreur :"
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sum=5
def add(a=1,b=3):
print a,b
print sum #内部函数引用同名变量,并且修改这个变量。python会认为它是局部变量。因为在此处print之前,没有定义sum变量,所以会报错(建议与情况一比较,备注:此处只是比上例先print sum)
sum=b+a
print sum
add(4,8)
print sum
Message d'erreur :
4 8 Traceback (most recent call last): ... ... ... UnboundLocalError: local variable 'sum' referenced before assignment
Lorsqu'on accède à une variable globale dans le programme et qu'on doit modifier sa valeur, on peut utiliser :globalmot-clé, qui déclare cette variable comme variable globale dans la fonction.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sum=5
print '改变之前:sum=',sum
def add(a=1,b=3):
global sum
print 'add 函数中:sum=',sum
sum=b+a
print '函数中改变之后:sum= ',sum
add(4,8)
print '改变之后 sum=',sum
Le résultat de sortie est:
改变之前:sum= 5 add 函数中:sum= 5 函数中改变之后:sum= 12 改变之后 sum= 12
URL d'origine : https://blog.csdn.net/my2010sam/article/details/17735159