攝影或3C

Python 三元運算子 (Ternary Operator) 完全指南; status = “成年” if age >= 18 else “未成年” ; 值_如果為真 if 條件判斷 else 值_如果為假 #取這個值 (如果條件成立),否則 (取那個值)

在寫程式時,我們經常遇到需要根據條件將變數設為不同值的情況。傳統的 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) # 輸出: 成年

解析:

  1. Python 先檢查中間的 if age >= 18
  2. 如果是 True,回傳左邊的 "成年"
  3. 如果是 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 等於 1False 等於 0 的特性來選取 Tuple 中的元素。

語法: (值_如果為假, 值_如果為真)[條件]

age = 20
# 注意順序是反的:(False的值, True的值)[條件]
status = ("未成年", "成年")[age >= 18]
  • 如果 age >= 18 是 True (1),取索引 1 -> “成年”
  • 如果 age >= 18 是 False (0),取索引 0 -> “未成年”

為什麼不推薦?

  1. 可讀性差,容易搞混順序。
  2. 效能問題:Tuple 內的兩個元素都會先被計算出來,即使條件只會用到其中一個。如果元素是耗時的函數呼叫,會浪費資源。

總結

掌握三元運算子,是從 Python 新手邁向中階開發者的重要一步!

推薦hahow線上學習python: https://igrape.net/30afN

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

Recent Posts