web-dev-qa-db-fra.com

Comment utiliser les variables globales dans les fonctions python?

Comment définir une variable globale dans une fonction python?

18
stgeorge

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.
23
Sukrit Kalra

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!
2
James

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.

2
korylprince

La déclaration explicite en utilisant global <variable name> dans une fonction devrait aider

1
vladfau

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
1
sberry

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
0
FlyingZebra1

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.

0
Fox