Python: diferencia entre ‘global’ y globals (). Update (var)

¿Cuál es la diferencia entre inicializar una variable como global var o llamar a globals().update(var) .

Gracias

Cuando tu dices

 global var 

le está diciendo a Python que var es la misma var que se definió en un contexto global. Lo utilizarías de la siguiente manera:

 var=0 def f(): global var var=1 f() print(var) # 1 <---- the var outside the "def f" block is affected by calling f() 

Sin la statement global, la var dentro del bloque "def f" sería una variable local, y establecer su valor no tendría ningún efecto sobre la var fuera del bloque "def f".

 var=0 def f(): var=1 f() print(var) # 0 <---- the var outside the "def f" block is unaffected 

Cuando dices globals.update (var) supongo que en realidad quieres decir globals (). Update (var). Vamos a romperlo.

globals () devuelve un objeto dict. Las claves del dict son los nombres de los objetos, y los valores del dict son los valores del objeto asociado.

Cada dict tiene un método llamado "actualizar". Entonces globals (). Update () es una llamada a este método. El método de actualización espera al menos un argumento, y se espera que ese argumento sea un dict. Si le dices a Python

 globals().update(var) 

entonces es mejor que var sea un dict, y le está diciendo a Python que actualice el dictado globals () con el contenido del dict var.

Por ejemplo:

 #!/usr/bin/env python # Here is the original globals() dict print(globals()) # {'__builtins__': , '__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__': , '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None} # Lo and behold, you've defined x without saying x='Howdy' ! print(x) Howdy