2017-06-19 118 views
1

我是新來的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」是規範的方法,是它的唯一選擇

回答

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__.pytree

但是,顯然__init__.py沒有import sklearn.tree,因爲它在導入它時找不到它。

爲了解決這個問題,將其導入手動:

import sklearn.tree 
classifier = sklearn.tree.DecisionTreeClassifier()