[遊戲化教學] Python程式優化大冒險:讓你的程式碼跑得比火箭還快!

  • Post by
  • Dec 31, 2023
post-thumb

🚀 為什麼優化是程式的「超級燃料」?

小朋友們,想像你的程式是一輛賽車,優化就是幫賽車升級引擎、減輕重量,讓它跑得更快更順!

💡 趣味事實:優化後的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

# 你的任務:改寫成兔子速度!

提示:

  1. 使用列表推導式
  2. 避免不必要的判斷
  3. 試試看map函數

挑戰2:記憶體省電大作戰

# 原始程式 (吃記憶體怪獸)
def get_big_matrix(n):
    return [[i*j for j in range(n)] for i in range(n)]

# 你的任務:改寫成記憶體友善版!

進階技巧:

  1. 使用生成器表達式
  2. 考慮稀疏矩陣
  3. 分塊處理大型數據

📊 優化效果視覺化

🎮 互動學習區

優化決策樹遊戲

當你的程式跑太慢時:
1. 是循環太多嗎? → 試試演算法優化
2. 是記憶體不足嗎? → 試試生成器
3. 是等待IO嗎? → 試試非同步處理
4. 都不確定? → 使用效能分析工具!

效能分析工具體驗

# 簡易效能分析
import cProfile

def test_func():
    # 你的測試程式碼
    pass

cProfile.run('test_func()')

💡 小學霸的優化秘笈

  1. 80/20法則:先優化最耗時的20%程式碼
  2. 測量優先:優化前後一定要測量速度
  3. 可讀性:不要為了優化讓程式變難懂
  4. 工具幫手:善用timeit、cProfile等工具

🏆 優化大師認證挑戰

完成以下任務獲得優化大師徽章:

  1. 將一個慢程式加速至少10倍
  2. 將一個程式的記憶體使用減半
  3. 寫出既快又易讀的程式碼
  4. 教會一個同學優化概念

🎉 恭喜完成優化冒險!現在你的Python程式也能像F1賽車一樣快了!下次上課我們要舉辦「優化大賽」,記得準備你的超速程式來參賽喔!

LATEST POST
TAG