[pyar] local vs global

Daniel Moisset dmoisset en machinalis.com
Mar Ago 13 15:06:24 ART 2013


2013/8/13 Marcos Dione <mdione en grulic.org.ar>

> globals, y que sino usa los del módulo builtins. por otro lado la doc
> del execution model dice que los locals de un módulo son también
> globals de dicho módulo, lo cual me confunde.
>
>
Esto de que "los locals de un módulo son también
globals de dicho módulo" es importante. En esencia quiere decir que en el
cuerpo de un modulo (o del shell interactivo), evaluar "locals() is
globals()" te da true, pero sino te da False.

Esto es importante porque en general python nunca toca el diccionario
global, solo el local. Cuando haces "x=3", aun a nivel modulo, python toca
locals()['x']. El unico motivo por el cual eso toca el diccionario global
*tambien* es que globals() is locals()

Cuando no se da esa identidad pasan cosas locas, por ejemplo si ejecutas

code="""
x = 3
def f():
    print x
f()
"""

exec(code, {}, {}) # Esto falla! el x seteado al principo es lcoal de
afuera, la funcion no lo ve

d = {}
exec(code, d, d) # Esto funciona, se da locals() is globals()

En general si queres correr un cacho de codigo que se porte "como módulo",
deberías mantener la identidad esa para que las cosas se porten razonable

Saludos,
   D.




>     se les ocurre algún ejemplo donde convenga más poner cosas en
> globals y no en locals y/o viceversa?
>
> --
> (Not so) Random fortune:
> Initially I started off [my blog] using Wordpress, but that was later
> purged once I bit the bullet and decided I'd rather be blogless than
> install PHP upon any server I cared about.
>             -- Steve Kemp
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130813/15311a12/attachment-0001.html>


More information about the pyar mailing list