你寫過同一段程式超過兩次嗎?那就代表你該學會函式了。
函式讓你的程式更「像大腦」,會分工、能組裝,邏輯清楚、重用率高。
今天我們就來學這個超實用的技能!
🔸 1. 函式是什麼?為什麼要用?
如果你開早餐店,蛋餅怎麼做?加蛋、翻面、切塊、裝袋……
寫程式也是:一段常用的流程,我們希望可以「取個名字」,以後一行就呼叫整段邏輯,這就是函式(function)!
🔸 2. 定義一個函式:用 def
def hello():
print('Hello, Python!')
hello()
🔽 輸出:
Hello, Python!
🔸 3. 函式也能有「參數」
def greet(name):
print(f"Hi {name},今天過得好嗎?")
greet("Joe")
🔽 輸出:
Hi Joe,今天過得好嗎?
🔸 4. 回傳值:用 return
把結果帶出來
def add(a, b):
return a + b
x = add(3, 5)
print(x)
🔽 輸出:
8
📌 return
是把東西「丟回」給呼叫者,不輸出也不印,但你可以存下來做進一步運算。
🔸 5. 必要參數 vs 預設參數:差在哪?

必要參數 vs 預設參數
❗ 錯誤寫法範例(預設參數放前面會報錯)
def wrong(drink="紅茶", food): # ❌
print(food, drink)
🔴 錯誤訊息:
SyntaxError: non-default argument follows default argument
🔸 6. 混合位置與關鍵字參數
def order(meal, drink="紅茶"):
print(f"你點了 {meal} 和 {drink}")
order("蛋餅")
order("漢堡", drink="奶茶")
🔽 輸出:
你點了 蛋餅 和 紅茶
你點了 漢堡 和 奶茶
🔸 7. 變動長度參數:用 *args
def avg(name, *grades):
if grades:
score = sum(grades) // len(grades)
print(f"{name} 的平均是:{score}")
else:
print(f"{name} 沒有成績")
avg("Nick", 100, 50, 20)
avg("Jerry")
🔽 輸出:
Nick 的平均是:56
Jerry 沒有成績
📌 *grades
會變成一個 tuple,可接收彈性長度的資料。
🔸 8. 想保護原本的 list,請用 .copy()
!
在 Python 中,list 是「可變的(mutable)」。
❌ 沒有 copy,會改到原資料:
def add10(scores):
for i in range(len(scores)):
scores[i] += 10
grades = [60, 70, 80]
add10(grades)
print(grades)
🔽 輸出:
[70, 80, 90]
✅ 用 .copy()
傳副本,保護原資料:
def add10(scores):
for i in range(len(scores)):
scores[i] += 10
print("函式內:", scores)
grades = [60, 70, 80]
add10(grades.copy())
print("函式外:", grades)
🔽 輸出:
函式內: [70, 80, 90]
函式外: [60, 70, 80]
🔸 9. 實用範例:計算 BMI
def get_bmi(tall, weight):
bmi_value = weight / (tall * tall)
return round(bmi_value, 2)
bmi = get_bmi(1.72, 80)
print(bmi)
🔽 輸出:
27.04
🔸 10. 延伸挑戰題
✅ 請寫一個函式 max(a, b, c)
,回傳三個數中最大值
def max(a, b, c):
return a if a > b and a > c else (b if b > c else c)
print(max(3, 2, 1)) # 👉 3
print(max(5, 8, 2)) # 👉 8
📘 本集重點小抄

🌟 小結
函式就像是一段你自己命名的小機器,能重複使用、降低錯誤、加速開發。
掌握參數的用法與傳值邏輯,就能寫出靈活又乾淨的程式邏輯。
下一集,我們會進入第 6 集 —— lambda
函式與排序應用,教你怎麼快速排序你的人生選項 ✨