L'astuce pour comprendre cela est que lorsque vous affectez à une variable, en utilisant =, vous le déclarez également comme une variable locale. Ainsi, au lieu de changer la valeur de la variable globale a, setA (valeur) définit une variable locale (qui s'appelle a) à la valeur transmise.
Cela devient plus évident si vous essayez d'imprimer la valeur d'un au début de seta (valeur) comme ceci:
def setA(value):
print "Before assignment, a is %d" % (a)
a = value
print "Inside setA, a is now %d" % (a)
Si vous essayez d'exécuter ce Python vous donnera une erreur utile:
Traceback (most recent call last):
File "scopeTest.py", line 14, in
setA(42)
File "scopeTest.py", line 7, in setA
print "Before assignment, a is %d" % (a)
UnboundLocalError: local variable 'a' referenced before assignment
cela nous dit que Python a décidé que le La fonction setA (value) a une variable locale appelée a, qui est ce que vous modifiez quand vous ass ign à lui dans la fonction. Si vous n'attribuez pas à a dans la fonction (comme avec printA()) alors Python utilise la variable globale A.
Pour marquer une variable comme globale, vous devez utiliser le mot-clé global dans Python, dans la portée que vous voulez utiliser la variable globale. Dans ce cas, cela correspond à la fonction setA (value). Ainsi, le script devient:
a = 7
def printA():
print "Value of a is %d" % (a)
def setA(value):
global a
a = value
print "Inside setA, a is now %d" %(a)
print "Before setA"
printA()
setA(42)
print "After setA"
printA()
Celui-ci dit plus Python que lorsque vous utilisez l'une variable dans la fonction Seta (valeur) que vous parlez de la variable globale, et non pas une variable locale.
* (mot grossier) * python – theonlygusti