Quelle est la différence entre l'initialisation d'une variable comme global var
ou l'appel globals().update(var)
.Python: Différence entre 'global' et globals(). Update (var)
Merci
Quelle est la différence entre l'initialisation d'une variable comme global var
ou l'appel globals().update(var)
.Python: Différence entre 'global' et globals(). Update (var)
Merci
Quand vous dites
global var
vous dites que Python var est le même var qui a été défini dans un contexte mondial. On peut l'utiliser de la manière suivante:
var=0
def f():
global var
var=1
f()
print(var)
# 1 <---- the var outside the "def f" block is affected by calling f()
Sans la déclaration globale, le var intérieur du bloc « def f » serait une variable locale, et fixant sa valeur n'a pas d'effet sur le var extérieur le bloc "def f".
var=0
def f():
var=1
f()
print(var)
# 0 <---- the var outside the "def f" block is unaffected
Quand vous dites globals.update (var) Je devine que vous signifie en fait globals() mise à jour. (Var). Faisons la distinction. Globals() renvoie un objet dict.
Les clés de dict sont les noms des objets, et les valeurs de dict sont les valeurs de l'objet associé. Chaque dict a une méthode appelée "mise à jour". Donc globals(). Update() est un appel à cette méthode. La méthode de mise à jour attend au moins un argument, et cet argument devrait être dict. Si vous dites Python
globals().update(var)
alors var vaut mieux être un dict, et vous dire Python pour mettre à jour les dict globals() avec le contenu du var dict.
Par exemple:
#!/usr/bin/env python
# Here is the original globals() dict
print(globals())
# {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None}
var={'x':'Howdy'}
globals().update(var)
# Now the globals() dict contains both var and 'x'
print(globals())
# {'var': {'x': 'Howdy'}, 'x': 'Howdy', '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None}
# Lo and behold, you've defined x without saying x='Howdy' !
print(x)
Howdy
Ok, donc, si j'avais une variable déclarée dans une méthode, et en ce que la méthode appelée globals() mise à jour ('var': '0'). Que pendant la première manche du script, je ne serais pas capable d'utiliser 'var' de la même manière qu'une variable qui a été déclarée comme "global var", à travers le reste du code lors de la deuxième exécution du script? – frank
globals(). Update ('var': '0') devrait être globals(). Update ({'var': '0'}). Cela affectera la variable globale 'var', même si cette commande a été placée dans une méthode. Le comportement de ces commandes est le même à chaque exécution du script. Si cela ne répond pas à votre question, veuillez poster votre code afin que nous puissions mieux comprendre. – unutbu
Ok, il est court, mais le formatage sera bizarre: essayer: \t i + = 1 sauf NameError: \t i = 0 . Ce code sera dans une méthode principale, et je ne peux pas le changer, ou ajouter des déclarations de méthode avant le code/en dehors de la méthode. Ce que je peux faire est d'ajouter du code dans la méthode principale après ce petit fragment de code. Je dois faire en sorte que 'i' agisse comme une variable globale, de sorte qu'elle augmente de '1' à chaque exécution de script successive. – frank