Python es dinámico y no estático en la naturaleza. En lugar de una tabla de símbolos como en el código de objeto compilado, la máquina virtual tiene un espacio de nombres direccionable para sus variables.
La función dir()
o dir(module)
devuelve el espacio de nombres efectivo en ese punto del código. Se usa principalmente en el intérprete interactivo pero también puede ser utilizado por código. Devuelve una lista de cadenas, cada una de las cuales es una variable con algún valor.
La función globals()
devuelve un diccionario de nombres de variables a valores de variables, donde los nombres de las variables se consideran de alcance global en ese momento.
La función locals()
devuelve un diccionario de nombres de variables a valores de variables, donde los nombres de las variables se consideran de alcance local en ese momento.
$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> import base64
>>> dir(base64)
['EMPTYSTRING', 'MAXBINSIZE', 'MAXLINESIZE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_b32alphabet', '_b32rev', '_b32tab', '_translate', '_translation', '_x', 'b16decode', 'b16encode', 'b32decode', 'b32encode', 'b64decode', 'b64encode', 'binascii', 'decode', 'decodestring', 'encode', 'encodestring', 'k', 're', 'standard_b64decode', 'standard_b64encode', 'struct', 'test', 'test1', 'urlsafe_b64decode', 'urlsafe_b64encode', 'v']
qué te hace pensar pitón hace una tabla de símbolos? –
@WinstonEwert :: http://docs.python.org/library/symtable.html –