python - 从包导入后卸载*

标签 python

有没有办法在导入后清除命名空间,例如:

from pandas import *

PS:我知道这是最糟糕的方式。这是出于教育目的。

最佳答案

您可以通过以下方式完全清除全局变量(保留内置变量,但没有定义或导入任何其他内容):

globals().clear()

globals() 返回表示全局命名空间的 dict,并且像所有 dict 一样,它有一个 clear 方法从中删除所有映射。

如果您想将其限制为仅来自 pandas 的内容,假设它定义了 __all__ (我不知道 pandas 是否专门定义了确实),你可以这样做:

import pandas
for name in pandas.__all__:
    del globals()[name]

由于 from SOMEMODULE import *,对于定义 __all__ 的包/模块,定义性地导入 __all__ 中列出的名称,因此这会取消映射这些名称具体名字。如果没有,对于未定义 __all__ 的情况,您将陷入稍微丑陋的启发式,我认为这只是“它以下划线开头吗?”,所以您可以这样做:

import pandas
for name in vars(pandas):
    if not name.startswith('_'):
        del globals()[name]

关于python - 从包导入后卸载*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67944838/

相关文章:

带请求的 Python 身份验证。为什么它不起作用? .NET 和维基百科

python - 使用python创建新文本文件时出错?

python - 如何在 PyCharm 中运行特定测试

python - 使用 python、cherrypy 和 pyserial 进行线程化

python - 如何用多个分隔符分割字符串并存储在列表中?

python - 在 python pptx 中将连接器的格式更改为箭头一

python - 在 Pandas 中理解就地=真

python - 将代码从 Python 翻译成 Smalltalk

python - 在 Ubuntu 上使用 pip 安装 NumPy 失败

python - 寻找一点 python 机器学习建议