立習習學Python第十天——模組

2020-08-10 17:02:36

模組化程式設計理念

模組和包概唸的進化史

  • 函數的產生
    程式變複雜,語句變多後,將實現同一個功能的語句封裝到函數中,統一管理和呼叫,於是產生了函數
  • 類和物件的產生
    程式更加複雜,函數和變數更多了,將同一雷松物件的數據和行爲,即變數和函數放到一起統一管理和呼叫,於是類和物件誕生了。
  • 模組的產生
    程式繼續複雜,函數和類更加多了,將實現類似功能的函數和類放到一個模組中,於是模組產生了。
  • 包的產生
    程式複雜,模組變多,將實現類似功能的模組放到一起,於是,就產生了。

標準庫模組

模組分爲標準庫模組和使用者自定義模組。
Python標準庫提供了操作系統功能、網路通訊、文字處理、檔案處理、數學運算等基本的功能。比如:random(亂數)、math(數學運算)、time(時間處理)、file(檔案處理)、os(操作系統互動)、sys(和直譯器互動)等。

模組化程式設計的優勢

  1. 便於將一個任務分解成多個模組,實現團隊協同開發,完成大規模程式;
  2. 實現程式碼複用,一個模組實現後,可以被反覆 反復呼叫;
  3. 可維護性增強。

模組化程式設計的流程

  1. 設計API(應用程式介面),進行功能描述;
  2. 編碼實現API中描述的功能;
  3. 再模組中編寫測試程式碼,並消除全域性程式碼;
  4. 使用私有函數實現不被外部用戶端呼叫的模組函數。

模組的匯入

import語句匯入模組

import語句的基本語法格式如下:

import 模組名  # 匯入一個模組
import 模組1,模組2# 匯入多個模組
import 模組名 as 模組別名 # 匯入模組並使用新名字

import載入的模組分爲四個通用類別:
a. 使用python編寫的程式碼
b. 已被編譯爲共用庫或DLI的C或C++擴充套件
c. 包好一組模組的包
d. 使用C編寫並鏈接到python直譯器的內建模組

import本質上是使用了__import__內建函數。

from…import語句匯入模組中的成員(函數/類)

from…import語句的基本語法格式如下:

from 模組名 import 成員1,成員2,…
from 模組名 import *  # 匯入這個模組中的所有成員

**注意:**應儘量避免第二種寫法,因爲可能會覆蓋掉自己定義的名字。

__import__()動態匯入

import語句本質上就是呼叫內建函數__import__(),我們可以通過它實現動態匯入。給__import__()動態傳遞不同的參數,就能匯入不同的模組。

s = "math"
m = __import__(s)
print(m.pi)

**注意:**一般不建議使用__import__()匯入,其行爲在python2和python3中有差異,會導致意外錯誤。如果需要動態匯入可以使用importlib模組。

import importlib
a = importlib.import_module("math")
print(a.pi)

模組的載入問題

一個模組無論匯入多少次,這個模組在整個直譯器進程內有且僅有一個範例物件。
如果想多次呼叫,使用動態呼叫importlib模組中的reload函數。

包package的使用

將功能類似的模組放到一起,形成了。包就是一個必須有__init__.py的資料夾。包下面 下麪可以包含模組,也可以包含子包。

匯入包的操作和本質

若要匯入module_AA.py。方式如下:

  1. import語句
import a.aa.module_AA # 在使用時,必須加完整名稱來參照即a.aa.module_AA.fun_AA()
  1. from…import語句
from a.aa import module_AA # 在使用時,直接使用模組名即module_AA.fun_AA()
  1. from…import語句加強版
from a.aa.module_AA import fun_AA # 直接匯入函數

匯入包的本質其實是「匯入了包的、__init__.py」檔案。
__init__.py的三個核心作用:

  • 作爲包的標識,不能刪除
  • 用來實現模糊匯入
  • 匯入包實質是執行__init__.py檔案,可以在__init__.py檔案中做這個包的初始化,以及需要統一執行程式碼。

包內參照

如果是子包內的參照,可以按相對位置引入子模組

from .. import module_A # ..表示上級目錄 .表示同級目錄
from . import module_A2

sys.path和模組搜尋路徑

當匯入某個某塊檔案時,Python直譯器一般是按照下述順序進行尋找。

  1. 內建模組
  2. 當前目錄
  3. 程式的主目錄
  4. pythonpath目錄(如果已經設定了pythonpath環境變數)
  5. 標準鏈接庫目錄
  6. 第三方庫目錄
  7. .pth檔案的內容
  8. sys.path.append()臨時新增的目錄

模組的分佈的安裝

模組的本地發佈

步驟如下:

  1. 爲模組檔案建立如下結構的資料夾(資料夾的名字和模組的名字要相同)
  2. 在資料夾中建立一個名爲setup.py的檔案,內容如下:
from ditutils.core import setup
setup(
	name = 'wyxMath' #對外模組的名字
	version = '1.0' #版本號
	description = '這是第一個對外發布的模組,測試用' #描述
	author = 'wyx' #作者
	author_email = '[email protected]'
	py_modules = ['wxyMath.demo1','wyxMath.demo2'] # 要發佈的模組
)
  1. 構建一個發佈檔案。通過終端,cd到模組資料夾c下面 下麪,再鍵入命令
    python setup.py sdist

本地安裝模組

在cmd命令列模式下操作,進setup.py所在目錄,鍵入命令:
python setup.py install