Comment définir une variable globale dans une fonction python?
Pour utiliser les variables global
dans une fonction, vous devez utiliser global <varName>
dans la fonction, comme suit.
testVar = 0
def testFunc():
global testVar
testVar += 1
print testVar
testFunc()
print testVar
donne la sortie
>>>
0
1
N'oubliez pas que vous devez uniquement les déclarer global
dans la fonction si vous souhaitez effectuer des affectations/les modifier. global
n'est pas nécessaire pour l'impression et l'accès.
Tu peux faire,
def testFunc2():
print testVar
sans le déclarer global
comme nous l'avons fait dans la première fonction et cela donnera toujours la valeur.
En utilisant un exemple list
, vous ne pouvez pas affecter un list
sans le déclarer global
, mais vous pouvez appeler ses méthodes et modifier la liste. Comme suit.
testVar = []
def testFunc1():
testVar = [2] # Will create a local testVar and assign it [2], but will not change the global variable.
def testFunc2():
global testVar
testVar = [2] # Will change the global variable.
def testFunc3():
testVar.append(2) # Will change the global variable.
Toute fonction peut accéder à un global, mais elle ne peut être modifiée que si vous le déclarez explicitement avec le mot clé 'global' dans la fonction. Prenons, par exemple, une fonction qui implémente un compteur. Vous pouvez le faire avec des variables globales comme ceci:
count = 0
def funct():
global count
count += 1
return count
print funct() # prints 1
a = funct() # a = 2
print funct() # prints 3
print a # prints 2
print count # prints 3
Tout cela est beau et bon, mais ce n’est généralement pas une bonne idée d’utiliser des variables globales pour des tâches autres que les constantes. Vous pourriez avoir une autre implémentation utilisant des fermetures, ce qui éviterait de polluer l'espace de noms et serait beaucoup plus propre:
def initCounter():
count = 0
def incrementCounter():
count += 1
return count
#notice how you're returning the function with no parentheses
#so you return a function instead of a value
return incrementCounter
myFunct = initCounter()
print myFunct() # prints 1
a = myFunct() # a = 2
print myFunct() # prints 3
print a # prints 2
print count # raises an error!
# So you can use count for something else if needed!
Considérons le code suivant:
a = 1
def f():
# uses global because it hasn't been rebound
print 'f: ',a
def g():
# variable is rebound so global a isn't touched
a = 2
print 'g: ',a
def h():
# specify that the a we want is the global variable
global a
a = 3
print 'h: ',a
print 'global: ',a
f()
print 'global: ',a
g()
print 'global: ',a
h()
print 'global: ',a
Sortie:
global: 1
f: 1
global: 1
g: 2
global: 1
h: 3
global: 3
Fondamentalement, vous utilisez une variable globale lorsque toutes les fonctions doivent accéder à la même variable (objet). Ce n'est pas toujours le meilleur moyen cependant.
La déclaration explicite en utilisant global <variable name>
dans une fonction devrait aider
Dans l'exemple ci-dessous, nous avons une variable c
définie en dehors de toute autre fonction. Dans foo
, nous déclarons également une c
, l'incrémentons et l'imprimons. Vous pouvez constater que l'appel répété de foo()
produira le même résultat encore et encore, car la variable c
dans foo
est locale dans la fonction.
Cependant, dans bar
, le mot clé global
est ajouté avant c
. La variable c
fait maintenant référence à toute variable c
définie dans la portée globale (c'est-à-dire notre instance c = 1
définie avant les fonctions). L'appel de bar
met à jour à plusieurs reprises la c
globale au lieu d'une étendue locale.
>>> c = 1
>>> def foo():
... c = 0
... c += 1
... print c
...
>>> def bar():
... global c
... c += 1
... print c
...
>>> foo()
1
>>> foo()
1
>>> foo()
1
>>> bar()
2
>>> bar()
3
Je suis aux prises avec la même question/ai mal compris ce que je voulais pendant quelques jours, et je pense que ce que vous essayez peut-être d'accomplir est d'obtenir une fonction générant un résultat, pouvant être utilisée une fois la fonction exécutée.
La façon dont vous pouvez accomplir ci-dessus consiste à utiliser return "some result", puis à l'attribuer à une variable après une fonction . Voici un exemple ci-dessous:
#function
def test_f(x):
y = x + 2
return y
#execute function, and assign result as another variable
var = test_f(3)
#can use the output of test_f()!
print var #returns 5
print var + 3 #returns 8
Une variable normale n'est utilisable que dans une fonction, une variable globale peut être appelée en dehors de la fonction, mais ne l'utilisez pas si vous n'en avez pas besoin, cela peut créer des erreurs et les grands programmeurs considèrent cela comme une chose novice. faire.