偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

開發(fā) 后端
本文將概述 Python 3.10 中新的“match...case”語法是什么以及如何使用它, 然后我們將更深入地研究高級用法。

“match...case”語法類似于其他面向?qū)ο笳Z言中的 switch 語句,它旨在使結(jié)構(gòu)與 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")

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

我們創(chuàng)建的函數(shù)接受一個名為 message 的參數(shù)。match 關(guān)鍵字接受一個對象來比較列出的案例。

在我們的示例中,match 關(guān)鍵字接收一個字符串列表,這是 message.split() 操作的結(jié)果。為了進(jìn)一步說明,假設(shè)我們這樣調(diào)用函數(shù):

greeting("hello")

該函數(shù)首先將這個字符串拆分為所有空格,并形成一個列表。對于上述輸入,匹配運(yùn)算符將使用 ["hello"] 列表。然后它將列表與每個案例進(jìn)行比較。我們的第一個案例是:

case ["hello"]

我們的輸入與此完全匹配,因此代碼在這種情況下繼續(xù)執(zhí)行。

輸出:

this message says hello

如果我們這樣調(diào)用函數(shù)會怎樣:greeting("hello George")?

使用該輸入,匹配運(yùn)算符將使用 ["hello", "George"] 列表來比較所有案例。第一種情況,case“hello”,將不匹配,因?yàn)楸容^列表中有兩個元素,而不是一個。

結(jié)構(gòu)匹配

匹配運(yùn)算符匹配給定的表達(dá)式的結(jié)構(gòu),因此,由于 case 表達(dá)式的長度,我們的第一個 case 不匹配,即使比較表達(dá)式與列表中的第一個元素匹配。

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

This message is a personal greeting to George

現(xiàn)在讓我們嘗試像這樣調(diào)用函數(shù):greeting("hello George Johnson")。

比較表達(dá)式變?yōu)?["hello", "George", "Johnson"]。現(xiàn)在讓我們來看看每個案例。第一種情況失敗,因?yàn)楸容^表達(dá)式中有 3 個元素,而不是 1。第二種情況以同樣的方式失??;第二種情況期望看到一個長度為 2 的列表,其中第一個元素是“hello”。第一個元素其實(shí)是“hello”,但是比較表達(dá)式有3個元素,所以這個case不匹配。

剩下的唯一選項(xiàng)是下劃線大小寫,這是默認(rèn)的匹配所有內(nèi)容的大小寫。把它想象成 switch 語句中的默認(rèn)情況。如果比較表達(dá)式與其他任何內(nèi)容都不匹配,它將始終與 _ 情況匹配。

下劃線作為最后一種情況這種情況下的任何情況都不會運(yùn)行,因?yàn)樗星闆r都將與下劃線情況匹配。這類似于 if...else 中的 else 關(guān)鍵字。_ 大小寫匹配所有內(nèi)容,因?yàn)?Python 將 _ 識別為有效的變量名。所以就像我們匹配 case ["hello", name] 時,比較表達(dá)式將綁定到 _ name。在我們的特定情況下,_ 變量將保存值 ["hello", "George", "Johnson"]。

所以在我們最新的函數(shù)調(diào)用greeting("hello George Johnson")中,輸出將是:

The message didn’t match with anything

高級用法

“match...case”語法是一個非常強(qiáng)大的工具,可用于比較許多不同的表達(dá)式和值。如果像我們在上面的示例中那樣比較列表,那么可以使用更多的匹配功能。

在 case 表達(dá)式中,可以使用運(yùn)算符將所有剩余元素放入變量中。例如:

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")

在此代碼段中,第二種情況將匹配并執(zhí)行,輸出為:

This is the first: one, and this is the rest: ["two", "three"]

還可以從兩個或多個結(jié)構(gòu)中組合案例分支,如下所示:

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")

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

我們還將介紹字典的“match...case”語法。匹配運(yùn)算符將檢查比較表達(dá)式是否包含 case 表達(dá)式中的屬性。例如:

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 運(yùn)算符將檢查輸入字典中是否存在 case 屬性,然后檢查值是否匹配。

總之,新的“match...case”運(yùn)算符是 Python 開發(fā)人員在創(chuàng)建分支案例時可以利用的強(qiáng)大工具。有了它,你可以可靠地檢查任何傳入變量的結(jié)構(gòu),并確保你不會嘗試訪問變量上不存在的內(nèi)容。

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

總之,新的“match...case”運(yùn)算符是 Python 開發(fā)人員在創(chuàng)建分支案例時可以利用的強(qiáng)大工具。有了它,可以可靠地檢查任何傳入變量的結(jié)構(gòu),并確保不會嘗試訪問變量上不存在的內(nèi)容。

責(zé)任編輯:龐桂玉 來源: python運(yùn)維技術(shù)
相關(guān)推薦

2021-10-12 15:23:25

Python 開發(fā)編程語言

2023-07-05 08:21:24

MySQL函數(shù)sp

2013-12-13 17:21:14

Lua腳本語言

2009-06-25 16:49:24

Hibernate

2023-11-17 12:04:39

GORM并發(fā)

2023-04-12 15:25:09

Bytrace鴻蒙

2021-03-22 08:45:30

異步編程Java

2023-08-12 15:05:26

Linuxcp 命令

2012-04-19 12:58:26

TitaniumJSS

2009-06-16 09:06:37

JavaMailJSP

2018-03-26 14:25:55

KubernetesSkaffold命令

2023-11-27 19:39:46

Goprotobuf

2013-05-14 10:13:06

WindowsLinux操作系統(tǒng)

2022-06-23 09:47:50

混沌工程系統(tǒng)Kubernetes

2011-06-15 10:08:01

Qt CVS

2017-04-05 13:17:26

LinuxShellvi

2010-04-29 17:51:40

Unix工具

2023-07-04 16:36:03

Linuxcd 命令

2023-07-23 19:26:18

Linuxcat 命令

2019-01-17 10:25:56

Python編程語言程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號