正如 RedBlueThing 和类比所说:
-
dir() 给出范围内变量的列表
-
globals() 给出了一个全局变量字典
-
locals() 提供局部变量字典
使用交互式shell(2.6.9版),在创建变量a = 1和b = 2后,运行dir()给出
['__builtins__', '__doc__', '__name__', '__package__', 'a', 'b']
运行locals() 给出
{'a': 1, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
在这种情况下,运行 globals() 给出的答案与 locals() 完全相同。
我还没有进入任何模块,所以所有变量都可以作为局部变量和全局变量使用。 locals() 和 globals() 列出变量的值以及名称; dir() 只列出名字。
如果我导入一个模块并在模块内运行locals() 或globals(),dir() 仍然只给出少量变量;它将__file__ 添加到上面列出的变量中。 locals() 和 globals() 也列出了相同的变量,但在打印出 __builtin__ 的字典值的过程中,它列出了更多的变量:内置函数、异常和类型,例如“@ 987654347@",而不仅仅是上面显示的简短的<module '__builtin__' (built-in)>。
有关 dir() 的更多信息,请参阅 New Mexico Tech 的 Python 2.7 quick reference 或 ibiblio.org 的 the dir() function。
有关 locals() 和 globals() 的更多信息,请参阅 Dive Into Python 的 locals and globals 和 New Mexico Tech 的有关 globals 的页面。
[评论:@Kurt:您提供了指向enumerate-or-list-all-variables-in-a-program-of-your-favorite-language-here 的链接,但该答案有误。问题是:type(name) 在该示例中将始终返回<type 'str'>。您确实得到了一个变量列表,它回答了问题,但在它们旁边列出了不正确的类型。这在您的示例中并不明显,因为所有变量都恰好是字符串;但是,它返回的是变量名称的类型,而不是变量的类型。要解决此问题:请使用 print eval('type(' + name + ')') 而不是 print type(name)。我很抱歉在答案部分发表评论,但我没有发表评论的权限,其他问题已关闭。]