python-16:模組 包
Python 模組
模組定義
隨著程式越來越龐大,需要分隔成幾個檔案;也需要能在不同檔案中複用函式、類和變數,而不是拷貝程式碼。為了滿足這些需要,Python提供了模組。
簡單來說,模組就是一個儲存了Python程式碼的檔案(.py 檔案)。檔名 就是 模組名 (modulename)加上 .py 字尾。
模組能定義函式,類和變數。模組裡也能包含可執行的程式碼。模組的模組名(作為一個字串)可以由全域性變數 __name __ 得到。
函式名,模組名都可看著變數名。
匯入模組
1、import modulename1 [, modulename2[,... modulenameN] 可通過 import 語句匯入一個或多個模組,模組匯入命令通常放在指令碼頂端。
2、from packegename import modulename1[, name2[, ... nameN]] 從模組中匯入一個或多個指定的部分到當前名稱空間中
3、from packegename
注:import modulename,實質:1、執行modulename.py檔案(實質,將此檔案程式碼全部匯入);2、引入變數名(modulename,模組名就是變數名),故有,modulename.function()
注:pagegename,實質是一個資料夾,但包含了一個__init__.py檔案,
注:執行檔案和引用檔案,一般bin.py是一個程式入口檔案,bin.py中的import modulename,modulename.py就是一個引用檔案
定位模組
當你匯入一個模組,Python解析器對模組位置的搜尋順序是: 通過 import sys sys.path檢視,
1. 當前目錄,(指的是執行檔案的當前目錄,即執行的那個檔案的目錄)
2. 如果不在當前目錄,Python則搜尋在shell變數PYTHONPATH下的每個目錄
3. 如果都找不到,Python會察看預設路徑。UNIX下,預設路徑一般為/usr/local/lib/python/
模組搜尋路徑儲存在system模組的sys.path變數中。變數裡包含當前目錄,PYTHONPATH和由安裝過程決定的預設目錄。
執行本質
#1 import test
#2 from test import add
無論1還是2,首先通過sys.path找到test.py,然後執行test指令碼(全部執行),區別是1會將test這個變數名載入到名字空間,而2只會將add這個變數名載入進來。
import只能匯入模組,不能匯入模組中的物件(類、函式、變數等)。如一個模組A(A.py)中有個函式getName,另一個模組不能通過import A.getName將getName匯入到本模組,只能用import A。如果想只匯入特定的類、函式、變數則用from A import getName即可。
呼叫包實質就是執行包下的__init__.py檔案,包之間的引用,用點操作,如:from web.web1.web2 import test
if __name__=='__main__':有兩層意思:1、在被調模組中用,是為了模組的測試;2、在主程式(bin.py)中用,是為了防止被其它使用者呼叫自己的主程式