HOWTO · Python
Python:在同一行撰寫多個 `if` 陳述式
本教學說明如何用分號分隔同一行上的簡單陳述式、用條件運算式選擇單一值,以及用 `any()` 檢查是否有條件成立;需要處理多個分支時,應使用多行 `if`/`elif`/`else` 區塊。
本頁內容
Python 可以用分號在同一實體行上分隔多個簡單陳述式,但 if 陳述式是複合陳述式,不能在分號後接著另一個陳述式來串接。若要處理多個分支,請使用一般的 if/elif/else 區塊。條件運算式可以在同一行選出一個值;any() 則用來回答另一個問題:可迭代物件中是否至少有一個項目為真。
簡短運算式寫在同一行可能很方便,但把分支邏輯塞進巢狀運算式,往往會讓執行順序和結果更難理解。以下範例會說明這些寫法的差異,讓你能依照任務選擇合適的形式。
在 Python 中於同一行撰寫多個 if 陳述式
分號可以分隔簡單陳述式,例如 first = 1; second = 2。但它不會把複合的 if 陳述式變成簡單陳述式:在同一實體行上寫成 if ready: start(); if finished: stop() 並不是有效的 Python 語法。單一 if 子句中可以用分號分隔簡單陳述式,例如 if ready: start(); log_status(),但這通常不如把每個動作各自放在縮排行中清楚。
如果你需要檢查不同條件並執行不同動作,請寫成 if/elif/else 區塊。Python 會依序檢查條件,並且只執行第一個成立條件所屬的程式區塊。當規則或動作改變時,這種區塊也比較容易擴充。
使用條件運算式選擇一個值
條件運算式的形式是 value_if_true if condition else value_if_false。它是一種運算式,因此會產生一個值,可供指派、回傳或傳遞給函式。它不會建立多個 if 陳述式,也不會執行不同的分支程式區塊。
例如,label = "adult" if age >= 18 else "minor" 會從兩個字串中選出一個。若要從三個結果中選擇,也可以使用巢狀條件運算式:label = "low" if score < 50 else "pass" if score < 80 else "high"。請由左至右理解巢狀結構:如果第一個條件不成立,Python 就會評估下一個條件運算式。只有在各選項仍然容易瀏覽時才使用這種寫法;若有多個巢狀條件,通常改用多行分支區塊會更清楚。
使用 any() 測試條件是否成立
內建函式 any() 在可迭代物件中至少有一個項目為真值時會回傳 True;若沒有任何項目為真值,則會回傳 False。例如,any(score >= limit for limit in (50, 80)) 會檢查分數是否至少達到其中一個門檻。產生器運算式會逐一提供布林結果,而 any() 一找到真值就會停止檢查。
當你需要的答案只有是或否時,請使用 any()。它不會指出哪個條件符合,也不會選出相應的訊息。如果每個條件都需要各自的結果或動作,請改用 if/elif/else。若產生器運算式能直接提供布林檢查結果,就不需要先建立清單再傳給 any()。
多個分支應優先使用多行 if/elif/else 區塊
當比較 a = 2 和 b = 3 時,這個區塊會印出相符的關係。
a = 2
b = 3
if a < b:
print("a is less than b")
elif a == b:
print("a is equal to b")
else:
print("a is greater than b")
a is less than b
if 和 elif 條件會依序檢查。由於這些值符合 a < b,第一個程式區塊會印出訊息,其餘分支則會略過。最後的 else 會處理其他所有關係,包括 a > b。範例中的程式碼與輸出區塊保持原樣,因此顯示的標籤仍是英文。
需要選擇一個簡單值時,請使用條件運算式;只需要知道可迭代物件中是否有真值時,則使用 any()。若要執行多個動作或呈現幾種不同結果,多行區塊能清楚表達分支順序與行為。分號雖然可以分隔簡單陳述式,但不代表用一行串接多個複合 if 陳述式是合適的替代方式。