2017-06-19 2 views
1

Ich bin neu in Python, aber ich dachte, ich verstehe, wie import Anweisungen funktionieren; Das folgende Beispiel beweist, dass ich es nicht tue.Verwendung eines importierten Moduls, um auf verschachteltes Modul zu verweisen

# 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' 

Da tree ist selbst ein weiteres Modul ich es nicht mit Punktsyntax zugreifen kann? Auch wenn die "from x import y" die kanonische Methode ist, ist es die nur Option?

Antwort

3

Wenn Sie ein Modul importieren, sucht Python nach dem Modul. Es könnte ein "Paket" sein, welches ein beliebiges Verzeichnis mit einer __init__.py Datei ist. Diese Datei wird als Name des Verzeichnisses importiert.

In Ihrer __init__.py Datei, würden Sie haben in der Regel:

import name.sub_package.module_a 
import name.sub_package.module_b 
import name.module_c 

den Rest der Module im Paket zu importieren, so können sie direkt verwendet werden. Manchmal, besonders bei größeren Modulen, kann der Paketautor entscheiden, dies nicht zu tun, was die Ladezeiten verkürzt, da Python weniger Module laden muss. Dies bedeutet, dass, wenn Sie tun:

from sklearn import tree 

ich das Paket ich davon ein wenig wie folgt aussieht:

sklearn/ 
    __init__.py 
    tree/ 
     __init__.py 

es sklearn/__init__.py importiert, sieht, dass es keine tree ist, importiert dann sklearn/tree/__init__.py als tree.

Aber natürlich hat __init__.py nicht import sklearn.tree, da es nicht finden kann, wenn Sie es importieren.

Um dies zu beheben, importieren Sie sie manuell:

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