1、簡單情形
Python中的包、模組匯入主要有兩種方式:
(1) import package.module(2) from package import module
將模組匯入當前程式之後,模組module中對應的屬性attr使用方式分別是:
(1) package.module.attr(2) module.attr
由此可以總結模組中的成員引用規律:
import匯入的包,使用包中具體成員時要使用‘絕對路徑’ ,從頂級包名開始寫成員引用路徑;
from—import匯入的包,使用包中具體成員時使用‘相對路徑’,從from—import 結構中的import之後的模組開始寫成員引用路徑; 2、複雜情形
當包中包含子包時,並考慮到__init__.py檔案作用時,包、模組的匯入及成員的使用較為複雜,容易造成混淆,例如,Python編程時有如下包結構:
pkg/__init__.py subPkg_a/ __init__.py mod_a.py mod_a1.py mod_a2.py subPkg_b/ __init__.py mod_b.py
__init__.py檔案解釋: 每個包下都有__init__.py檔案,這是個包初始化模組,匯入包時實質上是匯入該檔案中所定義的模組,也可以在該檔案中做一些初始化工作,也可以是空檔案。
根據上述包結構,若在mod_b.py中要使用mod_a、mod_a1中的函數(注意各種匯入方式中,函數的引用方式是不同的),有以下幾種方法:
在mod_b.py檔案中寫import pkg.subPkg_a.mod_a、import pkg.subPkg_a.mod_a1或者from pkg.subPkg_a import mod_a、from pkg.subPkg_a import mod_a1
在subPkg_a對應的__init__.py檔案中寫import pkg.subPkg_a.mod_a、import pkg.subPkg_a.mod_a1,那麼在mod_b.py檔案中匯入時就可以使用import pkg.subPkg_a或者from pkg.subPkg_a import *方式匯入mod_a及mod_b了,如下圖所示.
當一個包中包含多個模組時,在__init__.py中還可以使用__all__變數儲存一個匯入模組列表,表達更為簡潔,如下圖所示。
注意:因為__all__變數列表中沒有包含mod_a2,此時在mod_b中不能使用mod_a2中的成員。