2015-04-05 109 views

回答

5

軟件包是包含名爲__init__.py的最上層文件的任何目錄。一個模塊是任何擴展名爲.py的Python文件。

從這些定義中,你可能會發現模塊不能包含包。這是另一種方式;包包含模塊。模塊可以包含的唯一東西是綁定到Python對象(類,函數等)的名稱

導入包時,只需執行__init__.py文件。導入模塊時,只需執行模塊文件本身即可。使用from package import moduleimport package.module之類的軟件包從模塊中導入模塊時,需要執行軟件包中的__init__.py和模塊文件本身。

要從模塊只導入一個類,必須使用from X import Y語句,其中X是[package1.[subpackage2.]]modulenameY是綁定到要導入到名稱的對象的名稱。請注意,即使您進行這種導入,__init__.py和整個模塊腳本仍會執行。唯一的區別是添加到您的名稱空間的內容,這只是Y指向的對象。

請注意,from X import Y聲明有點奇怪。因爲如果X引用了包,則Y可引用包中的模塊。爲了克服這種困惑,最好將包和模塊看作命名空間。最大的區別是包是模塊的命名空間,模塊是具體Python對象的命名空間。

這是很好的注意,您可以從一個命名空間中使用逗號導入多個名稱:

from collections import OrderedDict, Counter

,另外,你可以從一個命名空間中導入所有名稱:

from itertools import *

但是,這不被推薦,因爲它不必要地污染了命名空間。對於Python標準庫,大多數都可以,因爲你不太可能與takewhile之類的東西發生名稱衝突,但是如果你正在處理一個包含多個庫的大型項目,最好保持名稱空間儘可能乾淨以避免衝突。

相關問題