模組
在電腦程式的開發過程中,隨著程式**越寫越多,在乙個檔案裡**就會越來越長,越來越不容易維護。
為了編寫可維護的**,我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的**就相對較少,很多程式語言都採用這種組織**的方式。在python中,乙個.py檔案就稱之為乙個模組(module)。
使用模組有什麼好處?
最大的好處是大大提高了**的可維護性。其次,編寫**不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括python內建的模組和來自第三方的模組。
使用模組還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但是也要注意,盡量不要與內建函式名字衝突。點
這裡檢視python的所有內建函式。
你也許還想到,如果不同的人編寫的模組名相同怎麼辦?為了避免模組名衝突,python又引入了按目錄來組織模組的方法,稱為包(package)。
舉個例子,乙個
abc.py的檔案就是乙個名字叫
abc的模組,乙個
xyz.py的檔案就是乙個名字叫
xyz的模組。
現在,假設我們的
abc和
xyz這兩個模組名字與其他模組衝突了,於是我們可以通過包來組織模組,避免衝突。方法是選擇乙個頂層包名,比如
mycompany,按照如下目錄存放:
mycompany├─ __init__.py├─ abc.py└─ xyz.py
引入了包以後,只要頂層的包名不與別人衝突,那所有模組都不會與別人衝突。現在,
abc.py模組的名字就變成了
mycompany.abc,類似的,
xyz.py的模組名變成了
mycompany.xyz。
請注意,每乙個包目錄下面都會有乙個
__init__.py的檔案,這個檔案是必須存在的,否則,python就把這個目錄當成普通目錄,而不是乙個包。
__init__.py可以是空檔案,也可以有python**,因為
__init__.py本身就是乙個模組,而它的模組名就是
mycompany。
類似的,可以有多級目錄,組成多級層次的包結構。比如如下的目錄結構:
mycompany ├─ web │ ├─ __init__.py │ ├─ utils.py │ └─ www.py ├─ __init__.py ├─ abc.py └─ xyz.py 檔案
www.py的模組名就是
mycompany.web.www,兩個檔案
utils.py的模組名分別是
mycompany.utils和
mycompany.web.utils。
自己建立模組時要注意命名,不能和python自帶的模組名稱衝突。例如,系統自帶了sys模組,自己的模組就不可命名為sys.py,否則將無法匯入系統自帶的sys模組。
mycompany.web也是乙個模組,請指出該模組對應的.py檔案。總結
模組是一組python**的集合,可以使用其他模組,也可以被其他模組使用。
建立自己的模組時,要注意:
Python學習札記 二十八 模組1
1.模組 乙個.py檔案稱為乙個模組。2.模組化的意義 a.提公升程式的可維護性 b.不用重複造輪子 3.避免模組衝突,解決方法 引入了按目錄來組織模組的方法,稱為包 package eg.abc.py abc模組,xyz.py xyz模組 倘若出現衝突 選擇乙個頂層資料夾名稱,盡量保證名稱唯一 m...
Lua程式設計(二十八)
lua語言會在執行源 之前先對其進行預編譯。生成預編譯檔案 也被稱為二進位制檔案,binary chunk 的最簡單方式是,使用標準發行班中附帶的luac程式。luac o prog.lc prog.lua上述命令會建立檔案prog.lua的預編譯版本prog.lc。lua解析器會像執行普通lua ...
CUDA學習(二十八)
多處理器級別 在更低層次上,應用程式應該最大化多處理器內各個功能單元之間的並行執行 如 硬體多執行緒 中所述,gpu多處理器依賴於執行緒級並行性來最大限度地利用其功能單元。因此利用率與駐留經線的數量直接相關。在每個指令發布時間,乙個warp排程器選擇乙個準備好執行下乙個指令的warp 如果有的話 然...