在寫程式時,我們經常遇到需要根據條件將變數設為不同值的情況。傳統的 if-else 寫法雖然清晰,但有時會顯得冗長。Python 提供了一種更優雅的單行寫法,稱為三元運算子(在官方文件中稱為「條件運算式 Conditional Expressions」)。
1. 什麼是三元運算子?
三元運算子允許你在一行程式碼內完成 if-else 的邏輯判斷與賦值。
語法結構
值_如果為真 if 條件判斷 else 值_如果為假這句話讀起來就像英文句子一樣自然:「取這個值 (如果條件成立),否則 (取那個值)」。
2. 實戰對比:傳統寫法 vs. 三元運算子
讓我們看一個最常見的例子:判斷一個人的年齡是否成年。
傳統寫法 (4 行)
age = 20
status = ""
if age >= 18:
status = "成年"
else:
status = "未成年"
print(status) # 輸出: 成年三元運算子寫法 (1 行)
age = 20
status = "成年" if age >= 18 else "未成年"
print(status) # 輸出: 成年解析:
- Python 先檢查中間的
if age >= 18。 - 如果是
True,回傳左邊的"成年"。 - 如果是
False,回傳右邊的"未成年"。

3. 進階應用場景
A. 在函數回傳值中使用
你可以直接在 return 語句中使用它,讓函數更加精簡。
# 判斷數字奇偶
def is_even(num):
return True if num % 2 == 0 else False
# 甚至可以更簡化 (雖然這例子直接 return num % 2 == 0 更好,但邏輯是通用的)
msg = "是偶數" if is_even(10) else "是奇數"B. 在列表推導式 (List Comprehension) 中使用
這是三元運算子最強大的場景之一,用於處理列表中的數據轉換。
scores = [85, 42, 78, 90, 55]
# 將分數轉換為 'Pass' 或 'Fail'
results = ["Pass" if s >= 60 else "Fail" for s in scores]
print(results)
# 輸出: ['Pass', 'Fail', 'Pass', 'Pass', 'Fail']C. 處理字串格式化
在 f-string 中也可以嵌入三元運算子。
is_admin = True
print(f"歡迎回來,{'管理員' if is_admin else '訪客'}!")
# 輸出: 歡迎回來,管理員!4. 常見陷阱與巢狀使用 (Nested Ternary)
雖然三元運算子可以「巢狀」使用(即 if-else 裡面還有 if-else),但極度不建議這樣做,因為會嚴重降低可讀性。
❌ 糟糕的寫法 (難以閱讀)
score = 75
# 判斷等級:A(>=90), B(>=60), C(<60)
grade = "A" if score >= 90 else ("B" if score >= 60 else "C")✅ 更好的寫法
對於多重條件,請乖乖使用標準的 if-elif-else 結構,或者使用字典映射 (Dictionary Mapping)。
if score >= 90:
grade = "A"
elif score >= 60:
grade = "B"
else:
grade = "C"5. 特殊技巧:Tuple 寫法 (不推薦但要看得懂)
在舊版的 Python 程式碼中,你可能會看到這種「駭客級」的寫法,它是利用布林值 True 等於 1,False 等於 0 的特性來選取 Tuple 中的元素。
語法: (值_如果為假, 值_如果為真)[條件]
age = 20
# 注意順序是反的:(False的值, True的值)[條件]
status = ("未成年", "成年")[age >= 18]- 如果
age >= 18是 True (1),取索引 1 -> “成年” - 如果
age >= 18是 False (0),取索引 0 -> “未成年”
為什麼不推薦?
- 可讀性差,容易搞混順序。
- 效能問題:Tuple 內的兩個元素都會先被計算出來,即使條件只會用到其中一個。如果元素是耗時的函數呼叫,會浪費資源。
總結

掌握三元運算子,是從 Python 新手邁向中階開發者的重要一步!
推薦hahow線上學習python: https://igrape.net/30afN










近期留言