一、什麼是模組
模組化 指將一個完成的程式分解為一個一個小的模組。透過將模組組合,來搭建一個完整的程式。如果不採用模組化,那麼所有的程式碼將統一儲存到一個檔案中。採用模組化後,將程式分別編寫到多個檔案中。使用模組化後,我們可以把程式碼進行復用,這方面後序的開發和維護。
二、模組的建立
在 Python 中一個 .py 結尾的檔案就是一個模組。要向建立一個模組,就需要建立一個 Python 檔案。模組名要符合識別符號的命名規範。
建立一個 moudle.py 檔案,內容如下:
if __name__ == "__main__":
print('當前模組被作為主模組執行了')
print(__name__,"模組模組被執行了")
# 在模組中定義的變數,在引入模組後,就可以直接使用了
a = 10
# 可以在模組中定義函式
def test():
print("我是", __name__ , "模組中的test()方法")
# 可以定義類
class Person:
def __init__(self):
self.name = "Sakura"
噹噹前檔案被執行時,
__name__
等於__main__
,如果當前模組是被匯入的話,則__name__
等於模組的名稱;
三、模組的引入
3.1、使用import匯入模組
我們可以透過 import 關鍵字引入多個模組,多個模組之間用逗號(,)分隔。import 語句可以在程式的任意位置呼叫,但是一般情況下,import 語句都會統一寫在程式的開頭。我們可以引入同一個模組多次,但是模組的例項只會建立一個。每一個模組內部都有一個 __name__
屬性,透過這個屬性可以獲取模組的名字。
import 模組名1,模組名2,...
其中,模組名就是 Python 檔案的名字,不要字尾名(.py)。在使用 import 語句匯入不同模組時,每執行一條 import 語句都會建立一個新的名稱空間(namespace),並且在該名稱空間中執行與 .py 相關的所有語句。在呼叫模組中的變數、函式和類名前加上 “模組名.”的字首。
使用 import 語句首次匯入模組時,會產生該模組對應的名稱空間。然後會執行該模組,將該模組執行過程中生成的名字都會丟到這個名稱空間中。然後會在當前執行檔案中產生一個名字,該名字指向被匯入模組產生的名稱空間。之後的匯入,都是直接引用首次匯入產生的名稱空間,不會重複實現。
建立 template.py 檔案,內容如下:
import moudle
# 一個程式中只會有一個主模組,主模組就是直接透過 Python 執行的模組。
print("主模組",__name__)
print(moudle)
print(moudle.__name__)
# 訪問模組中的屬性
print(moudle.a)
# 訪問模組中的方法
moudle.test()
# 使用模組中的類
p = moudle.Person()
print(p)
print(p.name)
我們還可以透過 as 關鍵字為模組名指定別名。
import 模組名 as 別名
import moudle as test
print(test)
print(test.__name__)
名稱空間可以理解為記錄名字和物件之間對應關係的空間;
目前 Python 的名稱空間大部分都是透過字典(dict)來實現的,其中,key 是識別符號,value 是具體的物件;
3.2、使用from...import匯入模組
如果每次匯入模組時都建立一個新的名稱空間,而是將具體的定義匯入到當前的名稱空間中,這時可以使用 from...import 語句。使用 from...import 語句後,不需要再新增字首,可以直接透過具體的變數、函式、類名等訪問。
from 模組名 import 變數
使用 from ... import 匯入模組時,會產生該模組對應的名稱空間。然後會執行該模組,將該模組執行過程中生成的名字都會丟到這個名稱空間中。然後會在當前檔案的名稱空間拿到一個名字,該名字指向被匯入模組中的對應成員的記憶體地址。
建立 routine.py 檔案,內容如下:
from moudle import Person,test
p = Person()
print(p)
print(p.name)
test()
我們還可以透過如下方法引入模組中的所有內容:
from 模組名 import *
在透過 from 模組名 import * 匯入模組中的內容時,不會引入以下劃線開頭的變數。
我們還可以為引入的變數使用別名:
from 模組名 import 變數 as 別名
from moudle import test as new_test
def test():
print("我是主模組中的test()方法")
test()
new_test()
在使用 from...import 匯入模組中的定義時,需要保證所匯入的內容在當前的名稱空間是唯一的,否則將會出現衝突,後匯入的同名變數、函式或者類會覆蓋先匯入的;
3.3、模組的匯入規則
在 Python 內部匯入模組時,必須要遵循它的匯入規則,必須去指定的目錄中去找 .py 檔案。我們可以透過 sys 模組中的 path 屬性來檢視指定的匯入目錄。
import sys
for item in sys.path:
print(item)
執行結果如下:
e:\Source\Software\Python # 當前檔案所在的目錄
D:\Pycharm\Python311\python311.zip # Python直譯器的python311.zip壓縮包
D:\Pycharm\Python311\DLLs # Python直譯器的DLLs目錄
D:\Pycharm\Python311\Lib # Python直譯器的Lib目錄
D:\Pycharm\Python311 # Python直譯器的根目錄
D:\Pycharm\Python311\Lib\site-packages # Python直譯器的Lib目錄下的site-packages目錄,第三方模組的安裝目錄
在 Pycharm 中執行此程式碼時,會自動新增當前專案的目錄到 sys.path 中;
匯入檔案時,都是根據 sys.path 中的目錄進行 .py 檔案的尋找。在匯入模組前,我們可以透過 append() 方法自己新增路徑。
import os
import sys
path = os.path.abspath(__file__) # 獲取當前執行檔案的絕對路徑
parent_path = os.path.dirname(path) # 獲取當前執行檔案所在的目錄
base_path = os.path.dirname(parent_path) # 獲取當前執行檔案所在的目錄的上一級目錄
sys.path.append(parent_path)
sys.path.append(base_path)
for item in sys.path:
print(item)
四、標準庫
為了實現開箱即用的思想,Python 為我們提供了一個模組的標準庫。在這個標準庫中,有很多很強大的模組我們可以直接使用,並且這個標準庫會隨 Python 的安裝一同安裝。
對於標準庫中的模組,我們可以直接使用 import 語句匯入到 Python 檔案中使用。
import 模組名
Python 中提供了許多標準模組,我們可以在 Python 的幫助文件中檢視。具體的方法是:開啟 Python 的安裝目錄下的 Doc 下的 html 目錄,在該目錄中有一個名為 index.html 檔案即為 Python 的幫助文件。
模組名 | 描述 |
---|---|
sys | 與 Python 直譯器一起環境相關的標準庫 |
time | 提供與時間相關的各種函式的標準庫 |
os | 提供了訪問作業系統服務功能的標準庫 |
calendar | 提供了與日期相關的各種函式的標準庫 |
urllib | 用來讀取來自網上(伺服器上)資料據的標準庫 |
json | 用於使用 JSON 序列化和反序列化物件 |
re | 用於在字串中執行正規表示式匹配和替換 |
math | 提供算術運算函式的標準庫 |
decimal | 用於進行精確控制運算精度、有效數位和四捨五入操作的十進位制運算 |
shutil | 用於進行高階檔案操作,如複製、移動、重新命名等 |
logging | 提供了靈活的記錄事件、錯誤、警告和除錯資訊等日誌資訊的功能 |
tkinter | 使用 Python 進行 GUI 程式設計的標準庫 |
import sys
# pprint模組中的pprint()方法可以用來堆列印的資料做簡單的格式化
import pprint
# 獲取執行程式碼時,命令列中所包含的引數
# 該屬性是一個列表,列表中儲存了當前命令的所有引數
# 命令列中輸入 python python檔名 引數1 引數2 ...
print(sys.argv)
# 獲取當前程式中載入的所有模組
# moudules是一個字典,字典的key是模組的名字,字典的value是模組物件
pprint.pprint(sys.modules)
# 它是一個列表,列表中儲存的是模組的搜尋路勁
pprint.pprint(sys.path)
# 表示當前python執行的平臺
print(sys.platform)
# 該函式用來退出程式
sys.exit("程式執行結束")
import os
# 透過這個屬性可以獲取系統的環境變數
print(os.environ,'\n')
print(os.environ["path"],'\n')
# 可以用來執行作業系統的命令
os.system("dir")
五、第三方庫
在進行 Python 程式開發時,除了可以使用 Python 內建的標準模組外,還可以使用第三方模組。對於這些第三方模組,可以在 Python 官方推出的 http://pypi.python.org/pypi 中找到。在使用第三方模組時,需要先下載並安裝該模組,然後就可以像使用標準模組一樣匯入並使用了。下載和安裝第三方模組可以使用 Python 提供的 pip 命令實現。pip 的語法格式如下:
pip <command> [moudulename]
- command:用於指定要執行的命令。常用的引數值有 install(用於安裝第三方模組)、uninstall(用於解除安裝已經安裝的第三方模組)、list(用於顯示已經安裝的第三方模組)等;
- moudulename:可選引數,用於指定要安裝或解除安裝的模組名,當 command 為 install 和 uninstall 時不能省略。
pip 指明在命令列(cmd)中使用;
第三方庫安裝在 Python 直譯器的下的 Lib 目錄下的 site-packages 的目錄;