gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:09 25 4
gpt4 key购买 nike

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

当我调用 pretty(dir()) 时,我最终漂亮地打印了模块中的对象。与 pretty(sorted(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() 结果,不如使用属性 __all__ 和/或 __dir__ 让您的模块公开显式导出命名空间,如 PEP 0562 中所述.

# lib.py
deprecated_names = ["old_function", ...]
__all__ = ["new_function_one", "new_function_two", ...]

def new_function_one(arg, other):
...

def new_function_two(arg, other):
...

def __dir__():
return sorted(__all__ + deprecated_names)

用法:

# main.py
import lib

dir(lib) # prints ["new_function_one", "new_function_two", "old_function", ...]

注意:模块级 __dir__ Hook 需要 Python 3.7+。


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

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

关于python - 如何从 python 中的模块中列出全局命名空间的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com