在python中,如何从模块中列出全局命名空间的内容

在python中,如何从模块中列出全局命名空间的内容,python,python-3.x,Python,Python 3.x,在python中,可以键入dir()以获取全局命名空间中的项列表,但该列表很难看,并且它同时包含公共和私有对象。我想写一个函数(比如说pretty)来美化它。我的函数将在一个模块中运行 当我调用pretty(dir())时,我很快就打印出了模块中的对象。同样适用于pretty(排序(globals())。如何获取全局名称空间中对象的名称列表(从模块中),以便进行美化 我在python3工作,如果有关系的话 编辑: 返回的前两个答案与包含pretty的模块中的控制代码有关。那不是我想做的。我的目标

在python中,可以键入dir()以获取全局命名空间中的项列表,但该列表很难看,并且它同时包含公共和私有对象。我想写一个函数(比如说
pretty
)来美化它。我的函数将在一个模块中运行

当我调用
pretty(dir())
时,我很快就打印出了模块中的对象。同样适用于
pretty(排序(globals())
。如何获取全局名称空间中对象的名称列表(从模块中),以便进行美化

我在python3工作,如果有关系的话

编辑: 返回的前两个答案与包含
pretty
的模块中的控制代码有关。那不是我想做的。我的目标是获得如下体验

>>> foo = create_something()
>>> bar = create_something_else()
>>> create_lots_more_stuff()
>>> # Hmmmm I'd like to see a list of all the things I have created in my interactive python session.
>>> pretty(dir())
foo     bar
baz     qux
etc     etc_etc

不要编写函数来过滤
dir()
结果,而是使用属性
\uuuuu all\uuuu
和/或
\uuuuu dir\uuuu
让您的模块公开导出名称空间,如中所述

用法:

# main.py
import lib

dir(lib)  # prints ["new_function_one", "new_function_two", "old_function", ...]
注意:模块级的
\uuuuu dir\uuuu
钩子需要Python 3.7+


编辑:也许您会对IPython交互式会话中提供的和魔术命令感兴趣。演示如下所示

>>> who
Interactive namespace is empty.
>>> x = 123
>>> def foo():
...     pass
... 
... 
>>> who
foo  x   
>>> whos
Variable   Type        Data/Info
--------------------------------
foo        function    <function foo at 0x109b59158>
x          int         123
>>谁
交互式命名空间为空。
>>>x=123
>>>def foo():
...     通过
... 
... 
>>>谁
福克斯
>>>谁
变量类型数据/信息
--------------------------------
foo函数
x int 123

globals()
为您提供了全局名称空间,即模块中的对象除非我遗漏了什么,否则这允许我告诉世界其他地方模块中有什么。我想让我的模块看看世界上其他地方都有什么。这与查看
locals()
globals()
有什么不同?@wim OP似乎对全局名称空间的性质感到困惑。是的,OP感到困惑,他感谢您帮助他缓解困惑。有一点可能仍然不清楚,对“globals()”的调用将来自模块内部,因此IIUC it不会从全局命名空间返回“globals”,而是从模块的命名空间返回。这有什么区别?通常,当人们谈论全局名称空间时,他们谈论的是模块的最外层名称空间。如果需要更多帮助,您必须清楚地区分所引用的全局名称空间以及它与模块名称空间的区别。
>>> who
Interactive namespace is empty.
>>> x = 123
>>> def foo():
...     pass
... 
... 
>>> who
foo  x   
>>> whos
Variable   Type        Data/Info
--------------------------------
foo        function    <function foo at 0x109b59158>
x          int         123