首頁 > 後端開發 > Python教學 > 在 Python 3.10 中使用'match...case”

在 Python 3.10 中使用'match...case”

WBOY
發布: 2023-04-12 09:25:13
轉載
1976 人瀏覽過

在 Python 3.10 中使用'match...case”

「match...case」語法類似於其他物件導向語言中的 switch 語句,它旨在使結構與 case 的匹配更容易。

讓我們開始.

語法

「match...case」語法如下:

def greeting(message):
match message.split():
case ["hello"]:
print("this message says hello")
case ["hello", name]:
print("This message is a personal greeting to {name}")
case _:
print("The message didn’t match with anything")
登入後複製

讓我們透過語法來看看它是如何工作的。

我們建立的函數接受一個名為 message 的參數。 match 關鍵字接受一個物件來比較列出的案例。

在我們的範例中,match 關鍵字接收一個字串列表,這是 message.split() 操作的結果。為了進一步說明,假設我們這樣呼叫函數:

greeting("hello")
登入後複製

該函數首先將這個字串拆分為所有空格,並形成一個列表。對於上述輸入,匹配運算子將使用 ["hello"] 清單。然後它將列表與每個案例進行比較。我們的第一個案例是:

case ["hello"]
登入後複製

我們的輸入與此完全匹配,因此程式碼在這種情況下繼續執行。

輸出:

this message says hello
登入後複製

如果我們這樣呼叫函數會怎麼樣:greeting("hello George")?

使用該輸入,匹配運算子將使用 ["hello", "George"] 清單來比較所有案例。第一種情況,case“hello”,將不匹配,因為比較清單中有兩個元素,而不是一個。

結構匹配

匹配運算子匹配給定的表達式的結構,因此,由於case 表達式的長度,我們的第一個case 不匹配,即使比較表達式與列表中的第一個元素匹配。

第二種情況是 ["hello", name]。這就是我們的輸入匹配的情況。如果你沒有為 Python 提供一個文字值來匹配,它會將比較表達式中的任何值綁定到 case 表達式中的變數名稱。因此,在我們的範例中,name 將設定為 George。並且這種情況匹配(它有“hello”作為第一個元素,並且還有一個元素,它被綁定到name),所以輸出是:

This message is a personal greeting to George
登入後複製

現在讓我們嘗試像這樣調用函數:greeting("hello George Johnson")。

比較表達式變成 ["hello", "George", "Johnson"]。現在讓我們來看看每個案例。第一種情況失敗,因為比較表達式中有 3 個元素,而不是 1。第二種情況以同樣的方式失敗;第二種情況期望看到一個長度為 2 的列表,其中第一個元素是「hello」。第一個元素其實是“hello”,但比較表達式有3個元素,所以這個case不符。

剩下的唯一選項是下劃線大小寫,這是預設的匹配所有內容的大小寫。把它想像成 switch 語句中的預設情況。如果比較表達式與其他任何內容都不匹配,它將始終與 _ 情況匹配。

下劃線作為最後一種情況下的任何情況都不會運行,因為所有情況都將與下劃線情況相符。這類似於 if...else 中的 else 關鍵字。 _ 大小寫匹配所有內容,因為 Python 將 _ 識別為有效的變數名稱。所以就像我們匹配 case ["hello", name] 時,比較表達式將綁定到 _ name。在我們的特定情況下,_ 變數將保存值 ["hello", "George", "Johnson"]。

所以在我們最新的函數呼叫greeting("hello George Johnson")中,輸出將會是:

The message didn’t match with anything
登入後複製

進階用法

「match...case」語法是一個非常強大的工具,可用於比較許多不同的表達式和值。如果像我們在上面的範例中那樣比較列表,那麼可以使用更多的匹配功能。

在 case 表達式中,可以使用運算子將所有剩餘元素放入變數中。例如:

comparison_list = ["one", "two", "three"]
match comparison_list:
case [first]:
print("this is the first element: {first}")
case [first, *rest]:
print("This is the first: {first}, and this is the rest: {rest}")
case _:
print("Nothing was matched")
登入後複製

在此程式碼段中,第二種情況將匹配並執行,輸出為:

This is the first: one, and this is the rest: ["two", "three"]
登入後複製

還可以從兩個或多個結構中組合案例分支,如下所示:

match comparisonList:
 case [first] | [first, "two", "seven"]:
 print("this is the first element: {first}")
 case [title, "hello"] | ["hello", title]:
 print("Welcome esteemed guest {title}")
 case [first, *rest]:
 print("This is the first: {first}, and this is the rest: {rest}")
 case _:
 print("Nothing was matched")
登入後複製

第一種和第二種情況由幾個不同的表達式組成,比較表達式可以適合這些表達式以運行case 分支。這提供了一些靈活性來組合分支。

我們也會介紹字典的「match...case」文法。匹配運算子將檢查比較表達式是否包含 case 表達式中的屬性。例如:

comparisonDictionary = {
 "John": "boy",
 "Jack": "boy",
 "Jill": "girl",
 "Taylor": "girl"
}
match comparisonDictionary:
 case {"John": "boy", "Taylor": "boy"}:
 print("John and Taylor are both boys")
 case {"John": "boy", "Taylor": "girl"}:
 print("Taylor is a girl and John is a boy")
 case _:
 print("Nothing matches")
登入後複製

輸出:

Taylor is a girl and John is a boy
登入後複製

match 運算子將檢查輸入字典中是否存在 case 屬性,然後檢查值是否符合。

總之,新的「match...case」運算子是 Python 開發人員在建立分支案例時可以利用的強大工具。有了它,你可以可靠地檢查任何傳入變數的結構,並確保你不會嘗試存取變數上不存在的內容。

重要在字典匹配中,即使輸入字典的屬性多於 case 指定的屬性,case 仍將匹配。

總之,新的「match...case」運算子是 Python 開發人員在建立分支案例時可以利用的強大工具。有了它,可以可靠地檢查任何傳入變數的結構,並確保不會嘗試存取變數上不存在的內容。

以上是在 Python 3.10 中使用'match...case”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板