Python - 如何获取我定义过的所有全局名称列表?
我在一个Python的命令行环境中工作,几周前我定义了一个变量,这个变量指向一个非常重要的列表。这个环境一直是打开的,但我忘记了这个变量的名字。请问有什么办法可以列出我定义过的所有全局变量的名字吗?
4 个回答
2
你没有启用 readline
吗?你可以查看你的解释器历史记录,找到你想要的东西。我觉得这比去翻找 globals()
或 dir()
要简单得多。
6
使用 dir()
函数
比如说,
>>> x = 666
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'x']
6
你是在问所有的全局变量,还是只问用户自己定义的那些?
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> x=2
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'x': 2, '__doc__': None, '__package__': None}
如果你想获取自己定义的变量,可以从这个列表中筛选掉那些键名不符合正则表达式 "__.*?__$"
的键值对。
更新
这里有个更好的答案:
$ python
Python 2.7.1 (r271:86832, Jun 5 2011, 15:52:25)
[GCC 4.2.1 (Apple Inc. build 5659)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 3
>>> import re
>>> [name for name in dir() if not re.match(r'__.*?__$', name)]
['re', 'x']
我在这里排除了那些以两个下划线开头和结尾的特殊名称,所以如果你自己用了这些名称,它们就不会显示出来。正则表达式末尾的 $
是为了防止匹配像 __abc__1
这样的名称。此外,我改用了 dir()
,这个函数可以获取当前作用域中的符号,而不一定是全局的,但看起来更简洁。它不会像 globals()
那样添加前面的列表推导变量。