[英]How to import partial attributes/variables without namespace of submodules in python?
[英]Initialize/import submodules without polluting the global namespace
通常,當我導入模塊時,我更喜歡僅導入頂部模塊並將所有模塊都視為該模塊的成員,而不是將我需要的每個函數導入全局名稱空間,即:
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
名稱以及綁定到sklearn
模塊對象的skl
名稱。
沒有導入將初始化sklearn.cluster
並將 skl
名稱綁定到sklearn
模塊。 導入子模塊后,您可以執行的最接近的操作是del sklearn
,或者將子模塊初始化導入推到某個地方,在這些地方,它們不會綁定此命名空間中的名稱,例如專用函數或模塊之類的東西(但是隱藏這樣的導入具有其自身的問題) ,或使用importlib.import_module
加載子模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.