Python 中的三元運算符——什麼?如何?為什麼?

Python 中的三元運算符——什麼?如何?為什麼?

在編程世界中,能夠簡化代碼對於代碼的可讀性和效率都很有價值。在 Python 中執行此操作的一個工具是三元運算符。

Python 三元運算符(或條件表達式)允許您根據給定條件是真還是假來評估語句,所有這些都在一行代碼中完成。它可以有效地替代多行 if-else 語句,使您的代碼更加緊湊。

當我們探索Python三元運算符的潛力時,您會發現它們對於優化您的程序非常有用。無論是簡化決策邏輯還是簡化代碼,有效地使用Python三元運算符都可以使您的代碼更易於閱讀和理解。

那麼,讓我們深入了解一下,看看它們到底是什麼!

Python 中的三元運算符——什麼? 如何? 為什麼?

目錄

什麼是 Python 三元運算符?

Python 三元運算符提供了一種簡潔的方法來根據條件是真還是假來評估語句,從而使您的代碼緊湊且更易於閱讀。有些人也稱它們為條件表達式或條件運算符。

基本語法

三元運算符是在Python 2.5中引入的,具有由三個操作數組成的簡單結構:

#demonstrate python ternary operator syntax

result = value_if_true if condition else value_if_false

該語法由三個主要部分組成:

  1. 條件:這是一個布爾表達式,計算結果為 true 或 false,一個

  2. value_if_true:布爾表達式為真時返回的值。

  3. value_if_false:布爾表達式為假時返回的值。

常見用例

三元運算符或條件表達式通常用於簡化代碼中的簡短 if-else 語句。下面是一些示例來說明如何應用 Python 三元運算符:

示例 1:根據條件分配值

 age = 25
 
category = "adult" if age >= 18 else "minor"

在此示例中,如果年齡大於或等於 18 歲,則Python 三元運算符將值“成人”分配給變量類別,否則為“未成年人”。

假設我們選擇使用 if-else 語句而不是 Python 三元運算符,它看起來像這樣:

age = 25

if age > 18:
   category = "Adult"
else:
   category = "Minor"

在這種情況下,我們可以看到使用三元運算符使代碼更加緊湊和易於閱讀。

示例 2:選擇兩個數字中最小的一個

a = 10
b = 15

smallest = a if a < b else b

在這裡,三元條件運算符通過返回 a 和 b 之間的較小值來幫助您確定兩個數字中的最小值。

示例 3:分配兩個變量的最小值:

num1 = 10
num2 = 20

min_num = num1 if num1 < num2 else num2
print(min_num)

此示例的輸出將為 10,因為三元運算符會評估條件並返回較小的值。

示例 4:查找數字是偶數還是奇數:

num = 5

result = "Even" if num % 2 == 0 else "Odd" 
print(result)

此示例的輸出將為Odd,因為條件的計算結果為False,並且三元運算符返回適當的結果。

這些示例演示了 Python 三元運算符如何使您的代碼更簡潔、更易於閱讀。通過使用基本語法和理解常見用例,您可以有效地將三元運算符合併到您的 Python 代碼中。

在更實際的應用中,您可以將它與循環結合使用,以對數據進行檢查、評估或執行操作。

為了更有效地處理數據,您可以觀看有關如何使用插值在 Python 中處理缺失數據的視頻。

如何使用 Python 三元運算符

普通的三元運算符 if-else 語法只是我們可以實現 Python 三元運算符的眾多方法之一。我們還可以使用常見的數據結構(如 Python 字典、元組和列表)來實現它。

讓我們看看其中的一些方法:

字典映射

您可以使用字典映射來模擬 Python 三元運算符,以存儲不同條件下的結果。當您有一組有限的條件和相應的結果時,它會很有用。

這是一個使用字典映射來檢查數字是偶數還是奇數的示例:

#Implement python ternary operator with dictionary mapping

number = 7
result = {True: "Even", False: "Odd"}

is_even = result[number % 2 == 0]

上面的程序將返回“ Odd ”,因為括號中的布爾表達式的計算結果為False。

使用元組

Python 元組是一種有序的、不可變的數據結構,可用於實現三元運算符。基本上,元組三元運算符的語法為:

(condition_is_false, condition_is_true)[condition]

條件計算結果為TrueFalse,在 Python 中分別等於整數1o

因此,元組返回與結果索引匹配的元素。例如,如果條件的計算結果為True,即1,則代碼返回condition_is true

否則,它的計算結果為False,即0,並且元組返回condition_is_false。下面是一個例子:

#Implement ternary operator with tuples

c = False
result = ('a', 'b')[c]

由於條件的計算結果為False,因此元組會將值“ a ”存儲在變量結果中。大多數開發人員不喜歡將這種格式用於三元運算符,因為它可能有點令人困惑,從而違背了初衷。

拉姆達函數

Lambda 函數是匿名單行函數,您可以將其用作三元運算符的替代方法。它們允許您執行簡單的計算並根據給定條件返回結果。

下面是使用 lambda 函數查找兩個數中最大值的示例:

#implement python ternary operator with lambda functions

a, b = 10, 20
max_value = (lambda: a, lambda: b)[a < b]()

如果條件的計算結果為True , lambda 函數將返回a。否則,它返回b

什麼是嵌套三元運算符?

嵌套三元運算符是具有兩個或多個布爾表達式的條件表達式。您可以通過將兩個或多個布爾條件鏈接在一起以檢查多個條件來創建它。

我們可以使用這些類型的三元運算符來模擬“ elif ”語句和嵌套的 if-else 塊。

讓我們看一個嵌套的 Python三元運算符的示例。

age = 21

#Normal elif statement
if age< 21:
   print('Child')
elif age< 25:
   print ('young adult')
else:
   print('Adult')

#elif statement as a ternary operator
print('Child') if age < 18 else print('Young adult') if age <21 else print ('Old Person')

#Output: 'Young Adult'

如果您想模仿嵌套的 if-else 語句,可以向 Python 三元運算符添加括號。但是,這不是好的做法,因為三元運算符可能變得非常長且不可讀。

在這種情況下,您最好在代碼中使用標準的 if-else 塊。

Python 三元運算符的優點是什麼?

在代碼中使用 Python 三元運算符有很多好處。其中一些優勢包括:

代碼可讀性和簡潔性

使用 Python 三元運算符可以使您的代碼更加簡潔,允許您在一行中編寫條件表達式。

這在處理簡單直接的條件時特別有用。您的代碼可以更具可讀性和更容易理解,因為它減少了對多行 if-else 語句的需要。

性能注意事項

雖然三元運算符可以產生更緊湊的代碼,但它對性能的影響通常很小。Python 的解釋器旨在優化代碼執行,這意味著三元運算符和 if-else 語句通常具有相似的性能特徵。

編寫 Python代碼時,將可讀性和可維護性置於性能之上,除非您正在使用性能關鍵型應用程序。

請記住,不同的情況需要不同的方法。有時,使用三元運算符是有益的,而在其他情況下,堅持使用傳統的 if-else 語句可能更合適。

Python 三元運算符的缺點

三元運算符非常適合簡化代碼並使其緊湊。但是,使用它們可能有一些缺點。

以下是其中一些缺點:

嵌套的三元運算符可能會變得複雜

在某些情況下,三元運算符可能會降低代碼的可讀性,尤其是在使用複雜或嵌套條件時。在這些情況下,合併傳統的 if-else 語句可能更適合保持代碼清晰。

當您嘗試用三元運算符替換嵌套的 if-else 語句時尤其如此。它很少產生乾淨的代碼。

每個操作數都是一個表達式

Python 三元運算符中的所有操作數或返回值都是表達式,而不是語句。嘗試在三元運算符的語法中使用賦值語句將導致語法錯誤。

您可以在下面的代碼中查看此示例。

'Adult' if True else x = 44

正如您在下面看到的,它會導致語法錯誤。在這種情況下,您應該使用 if-else 塊而不是條件運算符。

Python 中的三元運算符——什麼? 如何? 為什麼?

最佳實踐和技巧

在 Python 中使用三元運算符時,有一些最佳實踐和技巧可以幫助您編寫乾淨、高效和可讀的代碼。

首先,確保您的條件表達式簡短明了。又長又復雜的條件可能會讓人難以理解三元運算符背後的邏輯。

如果您發現自己面臨複雜的情況,最好改用常規的 if-else 語句。

#demonstrate nested ternary operator
# Good example 
result = "positive" if number >= 0 else "negative" 


# Bad example 
result = (a + b if (x > 10 and y > 20) else c + d) if (z > 30 and p > 40) else ...

其次,避免嵌套多個三元運算符,這會導致代碼混亂和不可讀。與復雜條件一樣,考慮使用 if-else 語句以提高可讀性。

# Good example 

x = A if condition1 else B if condition2 else C 

# Bad example 
x = A if condition1 else (B if condition2 else (C if condition3 else ...)) 

最後,請注意三元運算符的適當用例。它最適合條件和結果都易於理解的簡單單行賦值。

如果您的代碼涉及更複雜的邏輯、循環或多重賦值,最好堅持使用傳統的 if-else 語句。

Python 三元運算符常見問題解答

以下是一些新程序員通常會問我們的關於三元運算符的問題:

如何在 Python 的 return 語句中使用三元運算符?

您可以在函數的返回語句中使用 Python 三元運算符。您所要做的就是將它添加到返回語句中。

這是一個例子:

#program to check cheese age

def is_legal(age):
  return 'legal' if age > 18 else 'Not legal'

三元運算符是否比 Python 中的 if-else 語句更快?

不,它們都具有相似的性能特徵。三元運算符和 if-else 語句都具有 O(1) 時間複雜度。


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的