Mostrando las entradas con la etiqueta binding. Mostrar todas las entradas
Mostrando las entradas con la etiqueta binding. Mostrar todas las entradas

2014-04-28

Bindings extraños en python

El comportamiento de locals() en python es extraño. ¿Por qué no me muestra siempre todas las variables por las que clausura? (pero sí muestra algunas :-/). ¿Como hago para obtenerlas todas?

Abajo pongo el POC que muestra que no anda como quiero:

>>> def foo():
...   a = 1
...   def bar():
...     print locals()
...   bar()
... 
>>> foo()
{}

Como ven, no muestra a como posible variable.

En cambio, en este ejemplo, que debería tener el mismo comportamiento, sí muestra a como variable.

>>> def foo():
...   a = 1
...   def bar():
...     a
...     print locals()
...   bar()
... 
>>> foo()
{'a': 1}


¿Cómo hago para armar el diccionario de las variables que se pueden usar en una función en python?

Todo esto lo probé en una consola corriendo python 2.7.6.

Happy hacking,
Aureliano.