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

Python-如何获得我定义过的所有全局名称的列表?,python,Python,我在pythonshell中工作,几周前我定义了一个变量,它引用了一个非常重要的列表。外壳一直开着,但我忘记了这个名字。如何获得我定义过的所有全局名称的列表 使用dir() 比如说, >>> x = 666 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'x'] 您可以检查显示所有模块级变量的globals(),也可以检查本地范围的locals()。在提示中,这些是相同的。另

我在pythonshell中工作,几周前我定义了一个变量,它引用了一个非常重要的列表。外壳一直开着,但我忘记了这个名字。如何获得我定义过的所有全局名称的列表

使用
dir()

比如说,

>>> x = 666
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'x']

您可以检查显示所有模块级变量的
globals()
,也可以检查本地范围的
locals()
。在提示中,这些是相同的。另外,
vars()
显示所有可用的名称,无论您在哪里。

是显示所有全局名称还是仅显示用户定义的名称

>>> 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}

这里我排除了以两个下划线开头和结尾的特殊名称,因此如果您自己使用它们,它们将不会显示。正则表达式末尾的
$
,以防止接受
\uuuuuuuu1
。我还切换到了
dir()
,它获取当前范围内的符号,不一定是全局范围内的符号,但看起来更干净。它不会像
globals()那样添加前导列表理解变量。

您没有启用
readline
吗?您可以查看口译员的历史记录,以找到您想要的内容。我认为这比在
globals()或
dir()中挖掘更容易

@psihodelia对,编辑了答案。我可以添加代码来过滤字典,如果你喜欢的话。我看到了。对其中一个答案发表了评论。@psihodelia也在这个答案中添加了过滤规则,以防有人先到达这里。
$ 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']