我是Python新手,但我认为我理解import
语句是如何工作的;以下示例证明我没有。
# Works
from sklearn import tree
classifier = tree.DecisionTreeClassifier()
# Doesn't work
import sklearn
classifier = sklearn.tree.DecisionTreeClassifier()
# Error: AttributeError: module 'sklearn' has no attribute 'tree'
由于tree
本身是另一个模块,我无法使用点语法访问它?即使" from x import y
"是规范方法,是 only 选项吗?
答案 0 :(得分:3)
导入模块时,Python会查找模块。它可以是“包”,它是具有__init__.py
文件的任何目录。此文件作为目录名称导入。
在__init__.py
文件中,您通常会:
import name.sub_package.module_a
import name.sub_package.module_b
import name.module_c
导入包中的其余模块,因此可以直接使用它们。有时候,特别是对于更大的模块,包作者可能会决定不缩短加载时间,因为Python必须加载更少的模块。这意味着当你这样做时:
from sklearn import tree
我假设包看起来有点像这样:
sklearn/
__init__.py
tree/
__init__.py
导入sklearn/__init__.py
,发现没有tree
,然后导入sklearn/tree/__init__.py
为tree
。
但是,显然__init__.py
没有import sklearn.tree
,因为导入它时无法找到它。
要解决此问题,请手动导入:
import sklearn.tree
classifier = sklearn.tree.DecisionTreeClassifier()