到目前為止,我們已經學會了變數、資料型別、運算子、條件判斷與迴圈,能寫出小型的程式。但如果要處理更複雜的需求,例如隨機數、日期時間、數學計算,甚至是網路請求,就不必自己從零開始。Python 已經幫我們準備了許多 模組(Module),就像一個工具箱,隨時可以拿來使用。
在程式設計的世界裡:
透過 import,我們可以直接把這些工具搬進程式裡使用,大幅減少重複造輪子的時間。除了 Python 內建的標準模組,還能安裝社群開發的第三方模組,甚至自己寫模組來重複利用。
今天的目標是:
import 的各種方式。math、random、datetime、os)。pip install)。換句話說,今天會讓我們學會「善用別人寫好的工具」,讓程式不只會重複運算,還能真正變得強大又方便。
.py),裡面定義了變數、函式、類別,可以被其他程式載入使用。| 類型 | 說明 | 範例 | 取得方式 | 
|---|---|---|---|
| 標準模組 | Python 官方內建 | math,random,datetime | 直接使用 | 
| 第三方模組 | 社群開發,需安裝 | requests,numpy,openai | pip install | 
| 自訂模組 | 自己撰寫的檔案 | tools.py,config.py | 同專案資料夾 | 
import math
print(math.sqrt(25))  # 開根號 ➜ 5.0
print(math.pi)        # 圓周率 ➜ 3.14159...
import math as m
print(m.sqrt(16))     # 4.0
print(m.ceil(3.14))   # 4 (無條件進位)
好處:縮短命名、方便閱讀,尤其對於長模組名很有用。
from math import sqrt, pi, ceil
print(sqrt(16))    # 4.0 (不用寫 math.sqrt)
print(pi)          # 3.141592653589793
print(ceil(3.14))  # 4
優點:不用加 模組名稱. 前綴
風險:容易與自己變數重名,需小心命名衝突
from math import *
print(sin(pi / 2))  # 1.0
為什麼不建議?
import math
# 基本運算
print(math.sqrt(25))        # 開根號 ➜ 5.0
print(math.pow(2, 3))       # 2的3次方 ➜ 8.0
print(math.ceil(3.14))      # 無條件進位 ➜ 4
print(math.floor(3.99))     # 無條件捨去 ➜ 3
# 常數
print(math.pi)              # 圓周率
print(math.e)               # 自然對數底
import random
# 隨機整數和浮點數
print(random.randint(1, 10))     # 1-10 的隨機整數
print(random.random())           # 0-1 的隨機浮點數
# 隨機選擇
colors = ['red', 'blue', 'green']
print(random.choice(colors))     # 隨機選一個顏色
# 打亂清單
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)  # 被打亂的清單
from datetime import datetime, date
# 取得現在時間
now = datetime.now()
print(f"現在時間: {now}")
print(f"格式化: {now.strftime('%Y-%m-%d %H:%M:%S')}")
# 只處理日期
today = date.today()
print(f"今天: {today}")
print(f"年份: {today.year}")
import os
# 檔案和目錄操作
print(f"目前工作目錄: {os.getcwd()}")
print(f"目錄內容: {os.listdir('.')}")
# 檢查檔案是否存在
print(f"檔案是否存在: {os.path.exists('test.txt')}")
假設你有一個檔案叫 tools.py:
# tools.py
def greet(name):
    return f"Hello, {name}!"
def add(x, y):
    return x + y
# 模組常數
VERSION = "1.0"
# main.py
import tools
# 使用模組函式
print(tools.greet("Alice"))  # Hello, Alice!
print(tools.add(3, 5))       # 8
print(f"版本: {tools.VERSION}")
或者:
from tools import greet, add
print(greet("Bob"))    # Hello, Bob!
print(add(10, 20))     # 30
# 基本安裝
pip install requests
# 安裝特定版本
pip install requests==2.28.0
# 升級套件
pip install --upgrade requests
import requests
# 發送 HTTP 請求
response = requests.get("https://httpbin.org/get")
print(f"狀態碼: {response.status_code}")
print(f"回應內容: {response.text}")
| 寫法 | 使用方式 | 優點 | 缺點 | 
|---|---|---|---|
| import math | math.sqrt(25) | 清楚來源 | 需要前綴 | 
| import math as m | m.sqrt(25) | 簡短易讀 | 需記住別名 | 
| from math import sqrt | sqrt(25) | 直接使用 | 可能重名 | 
| from math import * | sqrt(25) | 最簡潔 | 不推薦 | 
| 錯誤類型 | 錯誤訊息 | 可能原因 | 解決方法 | 
|---|---|---|---|
| ModuleNotFoundError | No module named 'xxx' | 模組未安裝 | 使用 pip install xxx | 
| ImportError | cannot import name 'xxx' | 函式名稱錯誤 | 檢查函式名稱拼字 | 
| AttributeError | module has no attribute 'xxx' | 屬性不存在 | 使用 dir()檢查可用屬性 | 
# 檢查模組有哪些功能
import math
print(dir(math))  # 列出所有可用功能
# 檢查模組是否已安裝
try:
    import requests
    print("requests 已安裝")
except ImportError:
    print("requests 未安裝")
import math
radius = float(input("請輸入圓的半徑: "))
area = math.pi * radius ** 2
print(f"圓面積是: {area:.2f}")
import random
import string
def generate_password(length=8):
    chars = string.ascii_letters + string.digits
    return ''.join(random.choice(chars) for _ in range(length))
password = generate_password(12)
print(f"隨機密碼: {password}")
建立 mytools.py:
# mytools.py
def celsius_to_fahrenheit(celsius):
    """攝氏轉華氏"""
    return celsius * 9/5 + 32
def is_even(number):
    """檢查是否為偶數"""
    return number % 2 == 0
使用:
import mytools
temp_f = mytools.celsius_to_fahrenheit(25)
print(f"25°C = {temp_f}°F")
print(f"4是偶數嗎? {mytools.is_even(4)}")
# 1. 標準函式庫
import os
import sys
from datetime import datetime
# 2. 第三方套件  
import requests
import numpy as np
# 3. 自訂模組
from myproject import settings
import mytools
#  好的做法
import numpy as np              # 標準縮寫
import pandas as pd             # 標準縮寫  
import matplotlib.pyplot as plt # 標準縮寫
#  避免的做法
import numpy as n               # 不清楚的縮寫
from math import *              # 污染命名空間
學會 import 後,你就準備好學習:
import asyncio
import openai、from langchain import ...
import pandas as pd、import numpy as np
from flask import Flask
這些都建立在今天學的 import 基礎上!