模組匯入的幾種方式
概念
Python 模組是一個以 .py 結尾的 Python 檔案,包含了 Python 物件定義和Python語句。每一個模組在python裡都被看做是一個獨立的檔案。模組可以被別的程式引入,以使用該模組中的函式等功能,這也是使用 python 標準庫的方法。
模組匯入
模組可以匯入其它模組,習慣上把所有 import語句放在模組的開頭(不要求)。模組匯入的方式有幾種:
- 方式一:使用 import 語句來引入模組
import module1[, module2[,... moduleN]]
# 例如匯入一個path模組
import path
直接使用關鍵詞import
,後面跟具體的模組名稱,就可以匯入某一個模組。同一個模組不管執行了多少次import
模組名.函式名
- 方式二:使用from…import 語句來引入模組
from modname import name1[, name2[, ... nameN]]
# 例如要匯入pprint模組的pprint
from pprint import pprint
在使用import語句
匯入模組時會將整個模組引入進來,而使用from...import 語句則是從模組中匯入一個指定的部分到當前名稱空間中。如上面程式碼中則只會匯入pprint模組中的pprint函式,其他函式並不會匯入。
import語句
from...import語句
則不用加模組的限定名字,直接使用其函式方法;
# 第一種方式
import pprint
pprint.pprint("hello world")
# 第二種方式
from pprint import pprint
pprint("hello world")
- 方式三:使用
from…import*
語句來引入模組
from…import*
語句表示把一個模組的所有內容全都匯入到當前的名稱空間。
from modname import *
在多數情況下,Python程式設計師都不會使用這個功能,因為它在直譯器中引入了一組未知的名稱,而它們很可能會覆蓋一些你已經定義過的東西。 注意通常情況下從一個模組或者包內調入 * 的做法是不太被接受的, 因為這通常會導致程式碼的可讀性很差。不過,在互動式編譯器中為了節省打字可以這麼用。
模組的好處
- 大大提高了程式碼的可維護性;
- 程式碼不必從零開始,一個模組編寫完畢之後,其他模組可以直接呼叫,節約了工作時間;
- 避免函式名稱和變數名稱重複,在不同的模組中可以存在相同名字的函式名和變數名,但是儘量不要和系統內建的模組名稱重複;
__name__
屬性
一個模組被另一個程式第一次引入時,其主程式將執行。如果我們想在模組被引入時,模組中的某一程式塊不執行,我們可以用__name__
屬性來使該程式塊僅在該模組自身執行時執行。
每個模組都有一個__name__
屬性,當其值是'__main__'
時,表明該模組自身在執行,否則是被引入。
if __name__ == "__main__":
print("模組自身在執行")
模組搜尋路徑
搜尋路徑是由一系列目錄名組成的,Python直譯器就依次從這些目錄中去尋找所引入的模組。當一個模組被匯入的時候,模組的搜尋路徑為:
- 程式的根目錄
- PYTHONPATH環境變數設定的目錄
- 標準庫的目錄
- 任何能夠找到的.pth檔案的內容
- 第三方擴充套件的site-package目錄
PYTHONPATH 變數
PYTHONPATH是Python中一個重要的環境變數,用於在匯入模組的時候搜尋路徑,可以通過如下方式訪問:
import sys
sys.path
作為環境變數,PYTHONPATH 由裝在一個列表裡的許多目錄組成。PYTHONPATH 的語法和 shell 變數 PATH 的一樣。 在 Windows 系統,典型的 PYTHONPATH 如下:
set PYTHONPATH=c:\py