gpt4 book ai didi

python - 在不污染全局命名空间的情况下初始化/导入子模块

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:34 24 4
gpt4 key购买 nike

通常当我导入模块时,我更喜欢只导入顶层模块并将所有内容视为其中的成员,而不是将我需要的每个函数导入全局命名空间,即:

import os
os.walk()

代替:

from os import walk
walk()

但是,我最近遇到了一些模块,这些模块的子模块似乎必须全局导入才能运行。例如,Scikit-Learn 模块包含“集群”子模块。我想这样做:

import sklearn as skl
skl.cluster.KMeans(...)

但这会引发错误,因为我没有初始化 sklearn.cluster。相反,我看到了这个:

from sklearn import cluster
cluster.KMeans(...)

我真的不喜欢这样,因为我不喜欢污染我的全局命名空间。有没有办法解决?我试过这个:

import sklearn as skl
import skl.cluster

但这也行不通。如何在不全局导入的情况下初始化子模块?

最佳答案

import sklearn as skl
import sklearn.cluster

import 之后的名称必须是模块的实际名称,而不是别名。这确实意味着您最终将得到 sklearn 名称以及绑定(bind)到 sklearn 模块对象的 skl 名称。

没有导入会初始化 sklearn.cluster skl 名称绑定(bind)到 sklearn 模块.您可以做的最接近的是在导入子模块后 del sklearn ,或者将子模块初始化导入推到它们不会在此命名空间中绑定(bind)名称的地方,例如专用函数或模块或其他东西(但隐藏导入像这样有它自己的问题),或者使用 importlib.import_module 加载子模块。

关于python - 在不污染全局命名空间的情况下初始化/导入子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53563091/

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