
🚀 為什麼優化是程式的「超級燃料」?
小朋友們,想像你的程式是一輛賽車,優化就是幫賽車升級引擎、減輕重量,讓它跑得更快更順!
💡 趣味事實:優化後的Python程式,執行速度最快可以提升100倍以上!
程式優化三大好處
好處 | 比喻 | 實際效果 |
---|---|---|
跑更快 | 賽車換引擎 | 減少執行時間 |
更省油 | 減輕車重 | 降低記憶體使用 |
更穩定 | 強化車體 | 減少當機機會 |
🛠️ 小學生的Python優化工具箱
1. 選擇好的「賽道路線」:演算法優化
# 比較兩種找質數的方法
import time
# 慢速版
def find_primes_slow(n):
primes = []
for num in range(2, n+1):
for i in range(2, num):
if num % i == 0:
break
else:
primes.append(num)
return primes
# 快速版
def find_primes_fast(n):
sieve = [True] * (n+1)
for p in range(2, int(n**0.5)+1):
if sieve[p]:
for i in range(p*p, n+1, p):
sieve[i] = False
return [p for p in range(2, n+1) if sieve[p]]
# 測試速度
start = time.time()
find_primes_slow(1000)
print("慢速版:", time.time()-start)
start = time.time()
find_primes_fast(1000)
print("快速版:", time.time()-start)
執行結果範例:
慢速版: 0.45秒
快速版: 0.02秒
2. 減輕「賽車重量」:記憶體優化
# 記憶體使用比較
import sys
# 耗記憶體寫法
big_list = [x for x in range(1000000)]
print("列表大小:", sys.getsizeof(big_list), "bytes")
# 省記憶體寫法
def number_generator(n):
for x in range(n):
yield x
print("生成器大小:", sys.getsizeof(number_generator(1000000)), "bytes")
3. 優化技巧對照表
情境 | 不良寫法 | 優化寫法 | 提升效果 |
---|---|---|---|
循環 | for i in range(len(list)): | for item in list: | 更簡潔 |
字串拼接 | s += “new” | “".join([parts]) | 快100倍 |
列表生成 | list(range(1000000)) | (x for x in range(1000000)) | 省90%記憶體 |
🏎️ 實戰賽道:優化挑戰遊戲
挑戰1:龜兔賽跑優化賽
# 原始程式 (烏龜速度)
def process_data(data):
result = []
for item in data:
if item % 2 == 0:
result.append(item * 2)
else:
result.append(item + 1)
return result
# 你的任務:改寫成兔子速度!
提示:
- 使用列表推導式
- 避免不必要的判斷
- 試試看map函數
挑戰2:記憶體省電大作戰
# 原始程式 (吃記憶體怪獸)
def get_big_matrix(n):
return [[i*j for j in range(n)] for i in range(n)]
# 你的任務:改寫成記憶體友善版!
進階技巧:
- 使用生成器表達式
- 考慮稀疏矩陣
- 分塊處理大型數據
📊 優化效果視覺化
🎮 互動學習區
優化決策樹遊戲
當你的程式跑太慢時:
1. 是循環太多嗎? → 試試演算法優化
2. 是記憶體不足嗎? → 試試生成器
3. 是等待IO嗎? → 試試非同步處理
4. 都不確定? → 使用效能分析工具!
效能分析工具體驗
# 簡易效能分析
import cProfile
def test_func():
# 你的測試程式碼
pass
cProfile.run('test_func()')
💡 小學霸的優化秘笈
- 80/20法則:先優化最耗時的20%程式碼
- 測量優先:優化前後一定要測量速度
- 可讀性:不要為了優化讓程式變難懂
- 工具幫手:善用timeit、cProfile等工具
🏆 優化大師認證挑戰
完成以下任務獲得優化大師徽章:
- 將一個慢程式加速至少10倍
- 將一個程式的記憶體使用減半
- 寫出既快又易讀的程式碼
- 教會一個同學優化概念
🎉 恭喜完成優化冒險!現在你的Python程式也能像F1賽車一樣快了!下次上課我們要舉辦「優化大賽」,記得準備你的超速程式來參賽喔!