如何使用 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 <= 0game_overTrue
  • 否則, 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-三元運算符-1

Python 有一個三元運算符,它的工作方式很像 C 和 C++ 等語言中的三元條件運算符。 使用它的一般語法如下:

 expression1 if condition else expression2

讓我們解析上面的語法:

  • condition :要檢查的條件。
  • expression1 :要評估條件是否為 True 的表達式。
  • expression2 :條件為假時要評估的表達式。

現在,我們將從代碼的 if-else 版本中確定expression1expression2condition應該是什麼。

三元運算ex1

綜上所述,我們使用 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 處的元素: conditionFalse時要使用的值。
  • 元組中索引為 1 的元素: conditionTrue時要使用的值。

使用以上內容,我們有以下內容:

 >>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20

這裡,條件numVisits > 7True ,因為numVisits為 10。因為int(True)為 1, discount_perc的值為 20,即索引 1 處的元素。

用 Python 字典模擬三元運算符

您可以將TrueFalse設置為字典的鍵。 您可以將expression1expression2分別設置為鍵TrueFalse對應的值。

 some_dict = {True: expression1, False: expression2 }

下一步你要怎麼做? 現在,如果您使用some_dict[condition] ,如果conditionTrue ,則計算對應於True鍵的expression1 。 當conditionFalse時,將對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 > 7True 。 因此discount_dict[numVisits > 7]的計算結果為discount_dict[True] ,其值為 20。

你應該總是使用 Python 三元運算符嗎?

你應該一直使用 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 子句不是可選的。 三元運算符要求在conditionFalse時計算表達式。

 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 中等於和不等於運算符的教程。