本文 AI 產出,尚未審核
Python – 控制流程(Control Flow)
主題:三元運算式(Ternary Expression)
簡介
在寫程式時,我們常會遇到「依條件決定值」的情境。傳統做法是使用 if … else … 區塊,但在需要簡潔、可讀性高的單行判斷時,三元運算式(又稱條件運算式)是非常實用的工具。
它不僅能讓程式碼更精簡,還能在列表生成式、字典推導式或函式參數傳遞時,減少不必要的換行與縮排,提升程式的流暢度。對於剛入門的學員而言,掌握三元運算式有助於養成「寫得更簡潔、讀得更清楚」的好習慣;對中階開發者來說,更是撰寫高效、易維護程式的利器。
核心概念
1. 基本語法
Python 的三元運算式語法如下:
value_if_true if condition else value_if_false
condition:布林表達式,結果為True或False。value_if_true:當條件成立(True)時回傳的值。value_if_false:當條件不成立(False)時回傳的值。
範例
age = 18 status = "成年人" if age >= 18 else "未成年人" print(status) # 輸出: 成年人
2. 多層嵌套的寫法
當需要兩個以上的條件分支時,可以將三元運算式疊加,但要注意可讀性:
score = 85
grade = (
"優秀" if score >= 90 else
"良好" if score >= 80 else
"合格" if score >= 60 else
"不及格"
)
print(grade) # 輸出: 良好
小技巧:如果分支過多,建議改用
if … elif … else,或使用字典映射,以免程式碼變得難以追蹤。
3. 在列表生成式(list comprehensions)中的應用
三元運算式特別適合與列表生成式結合,快速產生條件過濾的結果:
numbers = [1, 2, 3, 4, 5]
parity = ["偶數" if n % 2 == 0 else "奇數" for n in numbers]
print(parity) # 輸出: ['奇數', '偶數', '奇數', '偶數', '奇數']
4. 在字典推導式(dict comprehensions)中的應用
同理,字典推導式也能利用三元運算式決定每個鍵的值:
temps_c = {"台北": 28, "高雄": 32, "花蓮": 25}
temps_f = {city: (c * 9/5 + 32) if c > 0 else "測站錯誤"
for city, c in temps_c.items()}
print(temps_f)
# 輸出: {'台北': 82.4, '高雄': 89.6, '花蓮': 77.0}
5. 作為函式參數的預設值或條件設定
有時候要根據外部參數決定函式內部的行為,三元運算式可以讓呼叫端保持簡潔:
def greet(name: str, formal: bool = False) -> str:
"""根據 formal 參數回傳不同的稱呼方式。"""
return f"您好,{name}!" if formal else f"嗨,{name}!"
print(greet("小明")) # 嗨,小明!
print(greet("小明", formal=True)) # 您好,小明!
常見陷阱與最佳實踐
| 陷阱 | 說明 | 建議的解決方式 |
|---|---|---|
| 過度嵌套 | 三層以上的嵌套會讓程式碼變得難以閱讀。 | 若條件超過兩層,改用 if … elif … else 或 字典映射。 |
| 可讀性下降 | 在長度超過 80 個字元的單行表達式會破壞排版。 | 使用圓括號分行,或將複雜邏輯抽成小函式。 |
| 誤用「賦值」 | 三元運算式只能回傳值,不能直接執行多個語句。 | 若需要多行動作,仍應使用傳統 if 區塊。 |
| 類型不一致 | value_if_true 與 value_if_false 必須是同一類型,否則可能導致隱式型別轉換錯誤。 |
確保兩側回傳相同或兼容的型別,或在必要時顯式轉型。 |
最佳實踐
- 保持單行簡潔:理想的長度在 60–80 個字元之間。
- 使用圓括號分段:當條件或回傳值較長時,可用換行加圓括號提升可讀性。
- 結合型別註解:在函式回傳值使用三元運算式時,加上型別提示,讓 IDE 更友好。
- 避免副作用:三元運算式只應返回值,避免在
value_if_true/false中執行 I/O 或變數修改。
實際應用場景
資料清理:將缺失值自動替換為預設值。
raw_price = None price = raw_price if raw_price is not None else 0.0API 回傳結果的快速判斷:根據回傳碼決定訊息。
status_code = response.status_code msg = "成功" if 200 <= status_code < 300 else "失敗"UI 顯示文字:根據使用者角色切換不同的介面文字。
role = "admin" button_label = "管理員面板" if role == "admin" else "使用者首頁"效能優化:在迭代大量資料時,用三元運算式減少不必要的分支跳躍。
data = [x if x > 0 else 0 for x in large_dataset] # 直接把負值轉為 0測試斷言:在單元測試中快速產生期望值。
expected = "PASS" if result == target else "FAIL" assert expected == "PASS"
總結
- 三元運算式是 Python 中簡潔的條件表達式,語法為
a if cond else b。 - 它適合在單行內完成「條件 → 值」的映射,常與 列表/字典推導式、函式參數結合使用。
- 使用時須注意 可讀性、類型一致性 以及 避免副作用;若條件過於複雜,應改用傳統
if … elif … else或字典映射。 - 在資料清理、API 回應處理、UI 文字切換等實務情境中,三元運算式能大幅減少程式碼行數,同時保持清晰的邏輯。
掌握好這個小技巧,能讓你的 Python 程式更簡潔、易讀,也為日後寫出更具可維護性的程式碼奠定基礎。祝你在 Python 的控制流程中玩得開心,寫出更優雅的程式!