[pyar] chancheando con globals() [era: local vs global]

Marcos Dione mdione en grulic.org.ar
Mar Ago 13 15:26:39 ART 2013


On Tue, Aug 13, 2013 at 02:35:57PM -0300, Angel Java Lopez wrote:
> Sin saber mucho de Python, el caso que imagino es que en globals dejes algo
> en un modulo, que otro modulo pueda consumir sin tener que declararlo o sin
> tener que importar el primer modulo explicitamente.

    la verdad es que esto está fuera de lo que pregunté inicialmente,
pero es bueno ver los bordes del lenguaje.

> Ejemplo, en un modulo declaro
> 
> def foo():
>   return 1
> 
> Lo pongo como global
> 
> globals()['bar'] = foo
> 
> En cualquier otro lugar puedo usar ahora
> 
> bar()
> 
> sin tener que importar ni nada. Parece que funciona como si fuera un
> builtin()

    lo probaste? siendo tan fácil de probar esto en python, al menos
vale la pena hacerlo...

> Algun ejemplo de este uso? Funciona como digo?

    veamos:

--- 8< moo.py ---
def foo ():
    return 1

globals()['bar']= foo
------ >8 -------

--- >8 baz.py ---
import moo

print (bar ())
------ 8< -------

    no, no funka:

mdione en diablo:~/src/projects/ayrton/tmp$ python3 baz.py 
Traceback (most recent call last):
  File "baz.py", line 3, in <module>
    print (bar ())
NameError: name 'bar' is not defined

    esto es porque globals() sólo devuelve el diccionario global del
módulo actual, cuyo cambio no se vé reflejado en el resto.

-- 
(Not so) Random fortune:
[12:32] <xanthus> el viaje mas largo que hice fue cuando sali del vientre de mi
    madre


More information about the pyar mailing list