自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python指南之結(jié)構(gòu)化模式匹配:讓編程變得更簡(jiǎn)單、更靈活

開(kāi)發(fā) 前端
在這里,程序會(huì)檢查 lunch_order 的值,并與不同的情況進(jìn)行匹配。一旦找到匹配項(xiàng),就會(huì)執(zhí)行相應(yīng)的代碼。比如用戶輸入 "pizza",程序就會(huì)顯示"Pizza time!"。最后一個(gè)情況中的下劃線 _ 是一個(gè)通配符,可以匹配任何值。如果輸入的值沒(méi)有匹配到前面的任何一種,就會(huì)執(zhí)行這個(gè)通配符對(duì)應(yīng)的代碼。

Python的結(jié)構(gòu)化模式匹配

Python 3.10 版本引入了一項(xiàng)新功能,叫做結(jié)構(gòu)化模式匹配。這其實(shí)就是一種條件邏輯,可以讓我們根據(jù)不同的條件執(zhí)行不同的代碼。

比如說(shuō),我想根據(jù)用戶的午餐訂單來(lái)顯示不同的消息:

lunch_order = input("What would you like for lunch? ")

match lunch_order:
    case 'pizza':
        print("Pizza time!")
    case 'sandwich':
        print("Here's your sandwich")
    case 'taco':
        print('Taco, taco, TACO, tacotacotaco!')
    case _:
        print("Yummy.")

在這里,程序會(huì)檢查 lunch_order 的值,并與不同的情況進(jìn)行匹配。一旦找到匹配項(xiàng),就會(huì)執(zhí)行相應(yīng)的代碼。比如用戶輸入 "pizza",程序就會(huì)顯示"Pizza time!"。

最后一個(gè)情況中的下劃線 _ 是一個(gè)通配符,可以匹配任何值。如果輸入的值沒(méi)有匹配到前面的任何一種,就會(huì)執(zhí)行這個(gè)通配符對(duì)應(yīng)的代碼。

或模式

在 Python 的模式匹配中,我們還可以用 or 模式來(lái)匹配多個(gè)可能的值。比如:

lunch_order = input("What would you like for lunch? ") 

match lunch_order:
    # --snip--
    case 'taco':
        print('Taco, taco, TACO, tacotacotaco!')
    case 'salad' | 'soup':
        print('Eating healthy, eh?')
    case _:
        print("Yummy.")

在這個(gè)例子中,如果用戶輸入 "salad" 或 "soup",程序就會(huì)顯示 "Eating healthy, eh?"。

捕獲模式

首先,我們來(lái)看看怎么用Python來(lái)做一個(gè)午餐點(diǎn)餐的程序。我們的目的是,無(wú)論用戶輸入什么,我們都能給出一個(gè)回應(yīng)。看這個(gè)例子:

lunch_order = input("你想吃什么午餐?") 

match lunch_order:
    # 這里還有其他代碼
    case 'salad' | 'soup':
        print('吃得健康哦!')
    case order:
        print(f"享受你的{order}。")

在這個(gè)代碼里,如果用戶輸入的不是我們列出的菜單上的東西,比如不是沙拉或湯,我們就用 case order: 這行來(lái)捕獲他們的輸入。這樣用戶輸入什么,我們就回應(yīng)什么。

部分捕獲

我們還可以只捕獲用戶輸入的一部分。比如說(shuō),我們想讓程序能處理類似“草莓冰淇淋”這樣的輸入,我們可以這樣寫(xiě):

lunch_order = input("你想吃什么午餐?")
if ' ' in lunch_order:
    lunch_order = lunch_order.split(maxsplit=1)

match lunch_order:
    case (flavor, 'ice cream'):
        print(f"這是你的成熟{flavor}午餐。")
    # 這里還有其他代碼

這段代碼會(huì)把輸入分成兩部分,如果第二部分是"ice cream",第一部分就會(huì)被捕獲為 flavor。

注意點(diǎn)

使用捕獲模式時(shí),有一個(gè)小陷阱。在模式中的所有沒(méi)有修飾的變量名,都會(huì)被用來(lái)捕獲值。這意味著,如果你想使用某個(gè)變量的值,你需要使用點(diǎn)操作符來(lái)指定它??催@個(gè)例子:

class Special:
    TODAY = 'lasagna'

lunch_order = input("你想吃什么午餐?")

match lunch_order:
    case Special.TODAY:
        print("今天的特餐很棒!")
    case 'pizza':
        print("披薩時(shí)間!")

守衛(wèi)語(yǔ)句

最后,我想向你們展示一個(gè)叫做“守衛(wèi)語(yǔ)句”的技巧。這是一個(gè)額外的條件語(yǔ)句,只有在滿足這個(gè)條件時(shí),模式才會(huì)匹配。比如說(shuō),我們想讓程序能特別處理“冰淇淋”這個(gè)詞,我們可以這樣寫(xiě):

class Special:
    TODAY = 'lasagna'

lunch_order = input("你想吃什么午餐?")

match lunch_order:
    # 這里還有其他代碼
    case 'salad' | 'soup':
        print('吃得健康哦!')
    case ice_cream if 'ice cream' in ice_cream:
        flavor = ice_cream.replace('ice cream', '').strip()
        print(f"這是你的成熟{flavor}午餐。")
    case order:
        print(f"享受你的{order}。")

在這個(gè)例子里,如果用戶輸入的詞里包含"ice cream",程序就會(huì)特別處理。

希望這個(gè)小教程對(duì)你們有幫助!通過(guò)這些例子,你可以看到Python模式匹配的強(qiáng)大之處,以及它如何幫助我們更好地處理數(shù)據(jù)和用戶的輸入。

Python模式匹配總結(jié)

在Python中,模式匹配有點(diǎn)像“魔法”,很容易讓人愛(ài)不釋手。但記住,不要濫用哦!結(jié)構(gòu)化模式匹配特別適合在多種可能的模式中檢查一個(gè)主題,但就像午餐訂單中的“冰淇淋”情形,當(dāng)主題的可能值變得復(fù)雜時(shí),它的局限性就顯現(xiàn)出來(lái)了。如果你不確定是否需要在某個(gè)場(chǎng)景使用結(jié)構(gòu)化模式匹配,那就堅(jiān)持使用條件語(yǔ)句吧。

責(zé)任編輯:武曉燕 來(lái)源: 更AI
相關(guān)推薦

2009-05-18 09:12:00

ASON自動(dòng)交換光網(wǎng)絡(luò)

2023-06-06 19:24:06

KubernetesSpark

2019-07-10 10:20:36

前端用戶體驗(yàn)javascript

2023-12-26 09:00:00

Java結(jié)構(gòu)化并發(fā)開(kāi)發(fā)

2019-04-04 14:05:20

consolejs前端

2020-06-16 13:22:22

AI創(chuàng)新深度學(xué)習(xí)

2009-06-18 15:51:52

SSL VPN負(fù)載均衡Array

2015-05-04 14:12:43

2019-01-18 13:13:40

Facebook 開(kāi)發(fā)開(kāi)源

2013-07-31 14:19:06

Windows 8.1

2009-08-04 15:55:56

OracleEPMBI

2023-11-27 08:21:49

Camera2API,

2024-03-01 01:25:40

結(jié)構(gòu)化日志可讀性

2009-07-06 14:23:00

SSL VPNArray netwo

2009-06-19 10:16:10

巔峰訪談

2023-12-05 10:25:24

Python類型注解

2017-05-16 21:31:03

結(jié)構(gòu)化數(shù)據(jù)新模式

2021-08-16 12:13:02

SwiftUIList ArticleList

2023-03-29 21:06:53

數(shù)據(jù)中心

2019-06-26 15:41:26

AI云原生云遷移
點(diǎn)贊
收藏

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