1. 程式人生 > >Python的模組和包的理解

Python的模組和包的理解

iamlaosong文

學習Python語言,對模組和包的理解總結如下:

1、模組(Module)就是包含程式碼的檔案,不一定是Python程式碼,有四種程式碼型別的模組:

•使用Python寫的程式( .py檔案)
•C或C++擴充套件(已編譯為共享庫或DLL檔案)
•包(包含多個模組)
•內建模組(使用C編寫並已連結到Python直譯器內)

使用模組可以提高程式碼的可維護性和重複使用,還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,所以編寫自己的模組時,不必考慮名字會與其他模組衝突,但要注意儘量不要與內建函式名字衝突。

2、包(Package)就是包含模組檔案的目錄,目錄名稱就是包名稱,

目錄中可以包含目錄,子目錄也是包,但包名稱應該包含上一級目錄的名稱。Python引入了按目錄來組織模組是為了避免模組名衝突,不同包中的模組名可以相同。

注意,每一個包目錄下面都會有一個__init__.py的檔案,這個檔案是必須存在的,否則,Python就把這個目錄當成普通目錄,而不是一個包。__init__.py可以是空檔案,也可以有Python程式碼,因為__init__.py本身就是一個模組,而它的模組名就是包名。

3、import命令可以匯入模組和包,能否被匯入,取決於其是否在系統搜尋路徑中。匯入內建模組sys後可以檢視sys.path內容確定系統搜尋路徑。模組和包的名稱取決於其存放路徑,

如下圖:

圖中Python/Lib在搜尋路徑中,所以可以用import json匯入這個包,包名稱是json。要想匯入json下面的的模組,比如decoder.py,則必須用命令:import json.decoder。同樣tests這個包(子目錄)要想匯入必須用命令import json.tests匯入,這個包名稱是json.tests。

4、命令“from 模組 import 物件”可以匯入模組中的物件,多個物件可以用逗號隔開或者用*匯入所有物件,但這種匯入方式是將物件匯入到當前模組中,所以匯入的物件不能和當前模組中的物件同名。

這種方式匯入後,可以直接用物件名稱呼叫,而不是用<模組.物件>這樣的名稱呼叫,例如模組hello.py中有個test函式,下面是兩種匯入方式對函式test的呼叫:

匯入模組:

import hello

hello.test()

匯入物件:

from hello import test

test()

這種方式下,如果原來定義了test函式,執行匯入後原來的test函式就被新匯入的test函式替換掉了。