如何使用 Python 三元運算符
已發表: 2023-01-04本指南將教您如何在 Python 中使用三元運算符。 您將學習語法並編寫幾個示例以了解其工作原理。
我們將從回顧 if-else 條件語句的工作原理開始,然後學習如何使用三元運算符編寫等效表達式。
接下來,我們將編寫一些示例,然後學習如何使用 Python 元組和字典來模擬 Python 的三元運算符的行為。 最後,我們將回顧一些您應該更喜歡使用三元運算符的用例。
讓我們開始!
Python 中的 If-Else 語句:回顧
您可以通過啟動 Python REPL 或在 Geekflare 的在線 Python 編輯器中進行編碼。
Python 中 if-else 語句的通用語法如下:
if condition: # do this else: # do this
在上面的代碼片段中, condition
表示要檢查的條件。 如果條件評估為True
,則觸發 if 塊。 如果條件的計算結果為False
,則執行 else 塊內的語句。
下面是一個示例,其中根據energy
值是否小於或等於零為game_over
變量分配布爾值。
- 如果
energy <= 0
,game_over
為True
。 - 否則,
game_over
為 False。
以下代碼片段顯示瞭如何使用 if-else 條件語句來執行此操作:
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
在此示例中, energy
為 -1,小於 0。因此game_over
為 True。
Python 三元運算符:語法和示例
Python 有一個三元運算符,它的工作方式很像 C 和 C++ 等語言中的三元條件運算符。 使用它的一般語法如下:
expression1 if condition else expression2
讓我們解析上面的語法:
-
condition
:要檢查的條件。 -
expression1
:要評估條件是否為 True 的表達式。 -
expression2
:條件為假時要評估的表達式。
現在,我們將從代碼的 if-else 版本中確定expression1
、 expression2
和condition
應該是什麼。
綜上所述,我們使用 Python 的三元運算符得到以下結果。
game_over = True if energy <= 0 else False print(game_over) # True
讓我們編寫另一個示例。 假設您經營一家書店,並根據讀者在過去一年中光顧您的書店的頻率,為他們的購買提供折扣。
讓numVisits
表示訪問次數。
- 如果
numVisits > 7
,則折扣百分比discount_perc
為 20。 - 否則,
discount_perc
為 5。
我們使用三元運算符為discount_perc
變量賦值。
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
接下來,我們將學習如何使用 Python 元組和字典模擬三元運算符。
用 Python 元組模擬三元運算符
與 Python 中的所有可迭代對像一樣,元組遵循零索引。 因此,如果元組中有兩個元素, tuple_name[0]
表示元組中的第一個元素, tuple_name[1]
表示元組中的第二個元素。
Python 中的基本數據類型有整數、浮點數、字符串和布爾值。 Python 支持類型轉換,讓您可以通過其在另一種數據類型中的等效表示來表示特定數據類型。
啟動 Python REPL 並運行以下示例。 如果您嘗試將整數轉換為布爾值,您會注意到以下內容:
-
bool(0)
是False
的。 -
bool(<any non-zero integer>)
返回True
。
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
類似地,當將布爾值轉換為整數時,我們有以下內容:
>>> int(True) 1 >>> int(False) 0
將類型轉換和索引放在一起,我們可以執行以下操作:
- 元組中索引 0 處的元素:
condition
為False
時要使用的值。 - 元組中索引為 1 的元素:
condition
為True
時要使用的值。
使用以上內容,我們有以下內容:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
這裡,條件numVisits > 7
為True
,因為numVisits
為 10。因為int(True)
為 1, discount_perc
的值為 20,即索引 1 處的元素。
用 Python 字典模擬三元運算符
您可以將True
和False
設置為字典的鍵。 您可以將expression1
和expression2
分別設置為鍵True
和False
對應的值。
some_dict = {True: expression1, False: expression2 }
下一步你要怎麼做? 現在,如果您使用some_dict[condition]
,如果condition
為True
,則計算對應於True
鍵的expression1
。 當condition
為False
時,將對expression2
進行求值。
讓我們(再次)編寫discount_perc
示例,但這次使用 Python 字典。
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
此處, numVisits = 10
大於 7。因此,條件numVisits > 7
為True
。 因此discount_dict[numVisits > 7]
的計算結果為discount_dict[True]
,其值為 20。
你應該總是使用 Python 三元運算符嗎?
到目前為止,我們已經學習瞭如何使用三元運算符。 但是我們應該總是使用三元運算符嗎? 好吧,三元運算符可能不是所有用例的最佳選擇。 當您應該更喜歡使用三元運算符而不是 if-else 語句時,本節將進行分解。 我們還將介紹何時應該考慮使用 if-else 語句而不是三元運算符。
比 If-Else 塊更簡潔
如前所述,在 Python 中,三元運算符表達式比 if-else 語句更簡潔。 因此,您可以使用它來檢查條件並動態地有條件地評估表達式。
在以下示例中, nums
是 100 個隨機生成的整數的列表。 對於 100 個數字中的每一個,我們檢查它是奇數還是偶數。 並且此評估發生在 f 字符串內。
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even
三元運算符需要 Else 子句
當您使用 if-else 條件語句時,else 子句是可選的。 讓我們舉個例子。 如果energy
下降到小於或等於零的值,則game_over
變量設置為True
。
但是,如果energy
大於零,則永遠不會初始化game_over
變量。 因此,如果您嘗試訪問game_over
變量,將會遇到錯誤。
energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined
解決此問題的一種方法是最初將game_over
設置為False
,如果能量水平小於或等於零,則將其更新為True
。
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
但是,當使用與上述等效的 Python 三元運算符時,else 子句不是可選的。 三元運算符要求在condition
為False
時計算表達式。
game_over = True if energy <= 0 else False
如果您通過刪除 else 部分將上面的內容更改為game_over = True if energy <= 0
,您將遇到語法錯誤,如下所示:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
要檢查多個條件,請使用 If-Else 語句
考慮這個例子:一組編碼面試問題中的每個問題都有一個相關的難度分數。 根據這個分數,我們為特定問題分配三個難度級別之一:簡單、中等或困難。 假設我們有以下內容:
分數 | 難度級別 |
小於 10 | 簡單 |
10 到 20 之間 | 中等的 |
大於20 | 難的 |
給定難度分數,您可以使用 Python 三元運算符獲得其難度級別,如下所示:
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
上述代碼塊中的三元運算符表達式具有以下形式:
expression1 if condition1 else expression2 if condition2 else expression3
雖然簡潔,但閱讀和解析有點困難。 下圖顯示了在這種情況下控制流是如何發生的。
以下代碼片段顯示了使用 if-else 語句的等效實現。 正如所見,控制流更容易理解,代碼也更易讀。
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
因此,當您有多個條件時,您應該使用 if-else 塊而不是三元運算符。 這確保代碼易於閱讀和理解。
此外,當您需要執行多條語句時——取決於條件是真還是假——您應該考慮使用 if-else 語句。
結論
以下是您在本教程中學到的內容的回顧。
- 在 Python 中,三元運算符可以使用以下語法:
expression1 if condition else expression2
。 - 您可以使用 Python 元組和字典模擬三元運算符的行為。
- 雖然三元運算符可以作為 if-else 塊的更簡潔的替代方案,但您應該確保代碼可讀。 為了提高代碼的可讀性,您可以使用 if-else 語句代替三元運算符,尤其是當您需要鏈接多個條件時。
接下來,學習查看有關 Python 中等於和不等於運算符的教程。