Si je crée une variable globale dans une fonction, comment puis-je utiliser cette variable dans une autre fonction?
Nous pouvons créer un global avec la fonction suivante:
def create_global_variable():
global global_variable # must declare it to be a global first
# modifications are thus reflected on the module's global scope
global_variable = 'Foo'
L'écriture d'une fonction n'exécute pas réellement son code. Nous appelons donc la create_global_variable
fonction:
>>> create_global_variable()
Utiliser des globaux sans modification
Vous pouvez simplement l'utiliser, tant que vous ne vous attendez pas à changer vers quel objet il pointe:
Par exemple,
def use_global_variable():
return global_variable + '!!!'
et maintenant nous pouvons utiliser la variable globale:
>>> use_global_variable()
'Foo!!!'
Modification de la variable globale depuis l'intérieur d'une fonction
Pour pointer la variable globale vers un autre objet, vous devez réutiliser le mot clé global:
def change_global_variable():
global global_variable
global_variable = 'Bar'
Notez qu'après avoir écrit cette fonction, le code qui la modifie n'a toujours pas été exécuté:
>>> use_global_variable()
'Foo!!!'
Donc, après avoir appelé la fonction:
>>> change_global_variable()
nous pouvons voir que la variable globale a été modifiée. Le global_variable
nom pointe désormais sur 'Bar'
:
>>> use_global_variable()
'Bar!!!'
Notez que "global" en Python n'est pas vraiment global - c'est seulement global au niveau du module. Il n'est donc disponible que pour les fonctions écrites dans les modules dans lesquels il est global. Les fonctions se souviennent du module dans lequel elles sont écrites, donc lorsqu'elles sont exportées dans d'autres modules, elles regardent toujours dans le module dans lequel elles ont été créées pour trouver des variables globales.
Variables locales du même nom
Si vous créez une variable locale du même nom, elle éclipsera une variable globale:
def use_local_with_same_name_as_global():
# bad name for a local variable, though.
global_variable = 'Baz'
return global_variable + '!!!'
>>> use_local_with_same_name_as_global()
'Baz!!!'
Mais l'utilisation de cette variable locale mal nommée ne change pas la variable globale:
>>> use_global_variable()
'Bar!!!'
Notez que vous devez éviter d'utiliser les variables locales avec les mêmes noms que les globales, sauf si vous savez précisément ce que vous faites et que vous avez une très bonne raison de le faire. Je n'ai pas encore rencontré une telle raison.
On obtient le même comportement en classe
Un commentaire de suivi demande:
que faire si je veux créer une variable globale à l'intérieur d'une fonction à l'intérieur d'une classe et que je veux utiliser cette variable à l'intérieur d'une autre fonction à l'intérieur d'une autre classe?
Ici, je démontre que nous obtenons le même comportement dans les méthodes que dans les fonctions régulières:
class Foo:
def foo(self):
global global_variable
global_variable = 'Foo'
class Bar:
def bar(self):
return global_variable + '!!!'
Foo().foo()
Et maintenant:
>>> Bar().bar()
'Foo!!!'
Mais je suggère qu'au lieu d'utiliser des variables globales, vous utilisez des attributs de classe, pour éviter d'encombrer l'espace de noms du module. Notez également que nous n'utilisons pas d' self
arguments ici - il peut s'agir de méthodes de classe (pratiques si la mutation de l'attribut de classe de l' cls
argument habituel ) ou de méthodes statiques (non self
ou cls
).