Python - 如何获取我定义过的所有全局名称列表?

3 投票
4 回答
2033 浏览
提问于 2025-04-17 02:07

我在一个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() 那样添加前面的列表推导变量。

撰写回答