模組(Module)其實就是一個 Python 檔案(.py),裡面放了變數、函式或類別。透過 import,就能在其他程式中使用它的功能。
好處:
step 1: 建立一個 mymath.py
# mymath.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
step 2: 在主程式 main.py 使用它
import mymath # 匯入自訂模組
print(mymath.add(10, 5))
print(mymath.sub(10, 5))
執行結果:
我們把「運算邏輯」獨立出來,讓主程式專心處理流程。
import mymath as mm
print(mm.add(3, 7))
from mymath import sub
print(sub(9, 4))
有時候模組不只給別人用,自己也能單獨執行。
判斷:
# mymath.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
if __name__ == "__main__":
print("測試模組功能:")
print(add(2, 3))
print(sub(7, 4))
如果直接執行 python mymath.py → 會跑測試區塊
如果被其他程式 import mymath → 測試區塊不會執行
(無測試區塊)
!!注意!!
main 並不是指 main.py 這個檔名,而是「程式的入口點」的意思
在這個範例中 main 是指 mymath.py
所謂「封裝」,就是把功能收進模組(甚至是類別)裡,讓「主程式」更乾淨,只有流程,不用看到一堆細節。
範例:BMI 工具包
def bmi(weight, height):
return weight / (height ** 2)
# main.py
import mymath
print("BMI =", round(mymath.bmi(48, 1.68), 2))
今天我學會如何建立自訂模組,體會到程式設計不只是「把功能寫出來」,更重要的是「結構化」與「重複利用」。就像生活收納一樣,東西要有自己的抽屜才方便整理,不然桌面會越來越亂。程式如果沒有拆模組,所有功能都堆在同一個檔案裡,很快就會變得難以維護。
這也讓我想到之前在寫 Java 的時候,因為同時存在 class 與 package 兩層結構,常常會混淆要怎麼正確呼叫。像是一個 class 在某個 package 裡,常常會搞不清楚要先 import package,還是直接去呼叫 class。那種「到底是用這層還是那層」的困惑,讓我對 Java 真的避之唯恐不及! Python 的模組與套件比較單一,一個 .py 檔就是模組,少了那種「到底現在該呼叫誰」的猶豫!雖然還沒完全熟練,但我開始能感覺到把程式切成模組的一目了然,未來回頭看會更輕鬆!
明天要學列表生成式(List Comprehension)!是一種快速寫法,能讓我們用一行程式就完成建構列表的動作,就像是把迴圈壓縮進一行程式碼裡,感覺很厲害!