[Python-es] scope de variables
Rolando Espinoza La Fuente
darkrho en gmail.com
Vie Jun 18 19:43:38 CEST 2010
On Fri, Jun 18, 2010 at 7:49 AM, Dr. Bobus <drbobus en gulic.org> wrote:
> Hola todos:
>
> Me he enganchado en algo que supongo será una trivialidad, pero enganchado estoy.
>
> He puesto un esqueleto de mi programa en:
>
> http://snipt.org/Qkkh
>
> Obtengo error (NameError: name 'cmasa' is not defined) en la linea 13 de forma sistemática.
>
> No acabo de entender lo que estoy haciendo mal.
Obviamente tienes un problema de scope. A través de eval estas
queriendo obtener el valor dinámicamente,
pero dentro el scope de eval no esta definida la variable en cuestión.
Tienes algo así:
def main():
def do_stuff(var):
value = eval(var)
print value
cmasa = "foo"
do_stuff("cmasa")
Y la definición de eval:
eval(source[, globals[, locals]]) -> value
entonces funcionaría de la siguiente manera
def main():
def do_stuff(var, global_vars={}):
value = eval(var, global_vars)
print value
cmasa = "foo"
do_stuff("cmasa", locals())
locals() dentro main retornaría un dic similar a:
{ "do_stuff": <method>, "cmasa": "foo" }
~Rolando
Más información sobre la lista de distribución Python-es