1、import作用 |
import跟C/C++中的#include作用有點類似,都是為了調用定義在其他文件中的變量、函數或者類,但實現的區別很大。
C/C++中如果a.cpp include了b.h那么b.h這個文件就原樣加到a.cpp文件中去了,這樣在b.h中的變量、函數、類就在a.cpp文件中聲明了,所以在a.cpp中能夠訪問。注意,這里的添加是C/C++原文件的添加。
python中如果a.py import了b.py那么不是把b.py的原代碼加到a.py中,而是把b.py編譯為一個module類型的對象,保存到b.pyc文件中,然后讀取到內存中。在a.py中可以調用module對象中的變量、函數、類。其中b.py中的普通語句會在編譯的時候被直接執行。
下面是一個import一個module(更應該說是include一個文件,將文件轉換成module對象包含進來。)
module_name.py
print("include module") name = "jeck" def func(): print("hello world") class test(): def func(self): print("class hello world")
測試文件
import module_name # 將module_name.py編譯成module對象包含進來 print(module_name.name) # 調用module對象中的變量 module_name.func() # 調用module對象中的函數 a = module_name.test() # 例化module對象中的類。 a.func()
輸出
include module # 編譯時候直接執行了普通語句 jeck # 調用name變量 hello world # 調用func函數 class hello world # 調用test類的func函數
2、import模塊的搜索順序
import module_name
(1)、先去build_in的模塊中去查找
(2)、build_in中沒有找到,就去sys.path中查找,sys.path的路徑包括:當前目錄、安裝python時的依賴位置、環境變量中的PYTHONPATH
如果要引用直接定義的module,要不把文件放在調用文件相同的目錄中,要么把module的存放路徑加入到sys.path中,sys.path是一個列表,可以這樣添加路徑
sys.path.append("/home/ydh/py/lib/")
lib目錄為存放自己定義module的路徑。
3、import包
import包是import一個目錄,然后編譯目錄下的__init__.py文件,將__init__.py文件編譯成一個module對象包含到當前文件中來。