模組與封包
# Python 模組與封包簡介
## 1. 什麼是模組(Module)?
Python 模組就是一個副檔名為 `.py` 的程式檔案。
模組可以包含:
- 變數
- 函式
- 類別
- 可執行程式碼
將程式拆成多個模組,可以讓程式:
- 更容易維護
- 重複使用程式碼
- 避免所有程式集中在同一個檔案
- 方便多人共同開發
例如:
```text
math_tools.py
```
就是一個名為 `math_tools` 的模組。
---
## 2. 建立程式檔案模組
假設建立一個 `tools.py`:
```python
# tools.py
def add(a, b):
return a + b
def greet(name):
return f"你好,{name}!"
```
這個檔案就是一個模組,其中定義了 `add()` 和 `greet()` 兩個函式。
---
## 3. 在主程式中載入模組
假設主程式為 `main.py`,且它和 `tools.py` 位於同一個資料夾:
```text
project/
├── main.py
└── tools.py
```
### 方法一:使用 `import 模組名稱`
```python
# main.py
import tools
result = tools.add(3, 5)
print(result)
print(tools.greet("小明"))
```
執行結果:
```text
8
你好,小明!
```
使用模組中的函式時,需要加上:
```python
模組名稱.函式名稱
```
---
### 方法二:使用 `from ... import ...`
```python
# main.py
from tools import add, greet
print(add(3, 5))
print(greet("小明"))
```
這種寫法可以直接使用函式名稱,不需要加上模組名稱。
也可以使用星號載入所有內容:
```python
from tools import *
```
但通常不建議這樣做,因為可能造成名稱衝突,且不容易知道函式來自哪個模組。
---
### 方法三:為模組設定別名
```python
import tools as t
print(t.add(10, 20))
```
`tools` 被取別名為 `t`,之後可以使用 `t` 代替 `tools`。
---
## 4. 什麼是封包(Package)?
封包是用來組織多個模組的資料夾。
一個封包通常是一個資料夾,裡面包含多個 `.py` 模組檔案。
例如:
```text
project/
├── main.py
└── utilities/
├── __init__.py
├── math_tools.py
└── text_tools.py
```
其中:
- `utilities` 是封包
- `math_tools.py` 是模組
- `text_tools.py` 是模組
- `__init__.py` 用來表示這個資料夾是一個 Python 封包
在現代 Python 中,即使沒有 `__init__.py`,某些情況下也可以建立「命名空間封包」,但一般教學與實務上仍常放置 `__init__.py`,以明確表示這是封包。
---
## 5. 使用封包中的模組
假設 `math_tools.py` 內容如下:
```python
# utilities/math_tools.py
def multiply(a, b):
return a * b
```
在 `main.py` 中可以這樣載入:
```python
from utilities import math_tools
print(math_tools.multiply(4, 6))
```
也可以直接載入函式:
```python
from utilities.math_tools import multiply
print(multiply(4, 6))
```
還可以使用別名:
```python
from utilities.math_tools import multiply as mul
print(mul(4, 6))
```
---
## 6. 封包和資料夾的對應關係
封包與資料夾的關係如下:
```text
project/
├── main.py
└── utilities/
├── __init__.py
└── math_tools.py
```
對應關係:
| Python 概念 | 實際檔案或資料夾 |
|---|---|
| 封包 `utilities` | `utilities/` 資料夾 |
| 模組 `math_tools` | `math_tools.py` |
| 子模組完整名稱 | `utilities.math_tools` |
| 主程式 | `main.py` |
因此:
```python
from utilities.math_tools import multiply
```
可以理解為:
1. 找到 `utilities` 資料夾
2. 找到其中的 `math_tools.py`
3. 從該模組載入 `multiply`
---
## 7. 完整簡單範例
資料夾結構:
```text
my_project/
├── main.py
└── calculator/
├── __init__.py
└── basic.py
```
`calculator/basic.py`:
```python
def add(a, b):
return a + b
def subtract(a, b):
return a - b
```
`main.py`:
```python
from calculator.basic import add, subtract
x = 10
y = 3
print("加法:", add(x, y))
print("減法:", subtract(x, y))
```
執行 `main.py` 後:
```text
加法: 13
減法: 7
```
這個例子中:
- `calculator` 是封包
- `basic.py` 是模組
- `add()` 與 `subtract()` 是模組中的函式
- `main.py` 是載入並使用它們的主程式
一般執行方式是在 `my_project` 資料夾中執行:
```bash
python main.py
```
相關學習地圖、教學課程
Python 資料工程
Python 後端工程、資料庫