亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python之流程控制語(yǔ)句match-case詳解

 更新時(shí)間:2025年03月18日 17:13:07   作者:Yant224  
這篇文章主要介紹了python之流程控制語(yǔ)句match-case使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

match-case 語(yǔ)法詳解與實(shí)戰(zhàn)

match-case 是 Python 3.10+ 引入的模式匹配語(yǔ)法,可替代傳統(tǒng)的 if-elif-else 鏈,支持復(fù)雜數(shù)據(jù)解構(gòu)和條件組合。

以下是 6 個(gè)核心使用場(chǎng)景與代碼案例:

一、基礎(chǔ)值匹配(類(lèi)似 switch-case)

# 匹配 HTTP 狀態(tài)碼
status_code = 418

match status_code:
    case 200:
        print("? Success")
    case 301 | 302 | 307:
        print("?? Redirect")
    case 400 | 401 | 403:
        print("? Client Error")
    case 500:
        print("?? Server Error")
    case _:
        print(f"Unknown status: {status_code}")
        
輸出:Unknown status: 418

二、數(shù)據(jù)結(jié)構(gòu)解構(gòu)匹配

場(chǎng)景1:列表解構(gòu)

def parse_command(cmd: list):
    match cmd:
        case ["start", *args]:
            print(f"?? 啟動(dòng)服務(wù),參數(shù): {args}")
        case ["stop", service_name]:
            print(f"?? 停止服務(wù): {service_name}")
        case ["restart"]:
            print("?? 重啟服務(wù)")
        case _:
            print("?? 無(wú)效指令")

parse_command(["start", "--port=8080"])  # ?? 啟動(dòng)服務(wù),參數(shù): ['--port=8080']
parse_command(["stop", "nginx"])         # ?? 停止服務(wù): nginx

場(chǎng)景2:字典解構(gòu)

user_data = {
    "name": "John",
    "age": 25,
    "address": {"city": "New York", "zip": "10001"}
}

match user_data:
    case {"name": str(name), "age": int(age), "address": {"city": city}}:
        print(f"?? {name} ({age}歲) 來(lái)自 {city}")
    case {"name": _, "age": int(age)} if age < 0:
        print("? 年齡不能為負(fù)數(shù)")
    case _:
        print("? 數(shù)據(jù)格式錯(cuò)誤")

# 輸出:?? John (25歲) 來(lái)自 New York

三、類(lèi)實(shí)例模式匹配

class Vector:
    def __init__(self, x, y, z=0):
        self.x = x
        self.y = y
        self.z = z

def analyze_vector(vec):
    match vec:
        case Vector(0, 0, 0):
            print("? 零向量")
        case Vector(x=0, y=0):
            print("?? Z軸向量")
        case Vector(x, y, z) if x == y == z:
            print("?? 立方體對(duì)角線(xiàn)")
        case Vector(_, _, z) if z != 0:
            print(f"?? 三維向量 (Z={z})")
        case _:
            print("?? 普通二維向量")

analyze_vector(Vector(0, 0, 0))   # ? 零向量
analyze_vector(Vector(2, 2, 2))   # ?? 立方體對(duì)角線(xiàn)

四、帶守衛(wèi)條件的高級(jí)匹配

def process_transaction(tx):
    match tx:
        case {"type": "deposit", "amount": amt} if amt > 0:
            print(f"?? 存入 {amt} 元")
        case {"type": "withdraw", "amount": amt, "balance": bal} if amt <= bal:
            print(f"?? 取出 {amt} 元")
        case {"type": "withdraw", "amount": amt}:
            print(f"? 余額不足,嘗試取出 {amt} 元")
        case {"type": _}:
            print("? 無(wú)效交易類(lèi)型")

process_transaction({"type": "withdraw", "amount": 500, "balance": 1000})
# 輸出:?? 取出 500 元

五、類(lèi)型驗(yàn)證與組合匹配

def handle_data(data):
    match data:
        case int(n) if n % 2 == 0:
            print(f"?? 偶數(shù): {n}")
        case float(f) if f > 100.0:
            print(f"?? 大額浮點(diǎn)數(shù): {f:.2f}")
        case str(s) if len(s) > 50:
            print("?? 長(zhǎng)文本(已截?cái)啵?", s[:50] + "...")
        case list([int(x), *rest]):
            print(f"?? 整數(shù)列表,首元素: {x}, 長(zhǎng)度: {len(rest)+1}")
        case _:
            print("? 未知數(shù)據(jù)類(lèi)型")

handle_data(42)            # ?? 偶數(shù): 42
handle_data([10, 20, 30])  # ?? 整數(shù)列表,首元素: 10, 長(zhǎng)度: 3

六、協(xié)議解析實(shí)戰(zhàn)案例

def parse_packet(packet: bytes):
    match packet:
        case b'\x08\x00' | b'\x08\x01':
            print("?? ICMP 數(shù)據(jù)包")
        case b'\x45' + payload:
            print(f"?? IPv4 數(shù)據(jù)包,載荷長(zhǎng)度: {len(payload)}")
        case [version, _, *rest] if version >> 4 == 6:
            print("?? IPv6 數(shù)據(jù)包")
        case _:
            print("? 未知協(xié)議")

parse_packet(b'\x45\x00\x00\x1c\x00\x01\x00\x00\x40')  # ?? IPv4 數(shù)據(jù)包...

使用注意事項(xiàng):

  • 版本要求:僅支持 Python 3.10+
  • 匹配順序:按代碼順序執(zhí)行,首個(gè)匹配成功即終止
  • 通配符 _:必須放在最后,匹配所有未處理情況
  • 性能優(yōu)化:復(fù)雜模式匹配可能影響性能,避免深層嵌套

與傳統(tǒng)寫(xiě)法對(duì)比:

  • 場(chǎng)景 match-case 寫(xiě)法 if-elif 傳統(tǒng)寫(xiě)法
  • 多條件值匹配 使用 運(yùn)算符簡(jiǎn)潔組合 需要重復(fù) or 連接條件
  • 字典嵌套解構(gòu) 直接提取多級(jí)字段 多層 get( ) 檢查和類(lèi)型驗(yàn)證
  • 類(lèi)屬性檢查 直接匹配對(duì)象屬性 需要 isinstance() 和屬性訪(fǎng)問(wèn)
  • 組合條件 case + if 守衛(wèi)條件 需要復(fù)雜布爾表達(dá)式
  • 通過(guò)合理使用 match-case,可以使代碼更簡(jiǎn)潔易讀,特別適用于:協(xié)議解析、API響應(yīng)處理、復(fù)雜業(yè)務(wù)規(guī)則判斷等場(chǎng)景。建議搭配類(lèi)型提示(Type Hints)使用效果更佳!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas中DataFrame.head()函數(shù)的具體使用

    Pandas中DataFrame.head()函數(shù)的具體使用

    DataFrame.head()是Pandas庫(kù)中一個(gè)非常重要的函數(shù),用于返回DataFrame對(duì)象的前n行,本文主要介紹了Pandas中DataFrame.head()函數(shù)的具體使用,感興趣的可以了解一下
    2024-07-07
  • Python實(shí)現(xiàn)CART決策樹(shù)算法及詳細(xì)注釋

    Python實(shí)現(xiàn)CART決策樹(shù)算法及詳細(xì)注釋

    CART算法是一種樹(shù)構(gòu)建算法,既可以用于分類(lèi)任務(wù),又可以用于回歸,本文僅討論基本的CART分類(lèi)決策樹(shù)構(gòu)建,不討論回歸樹(shù)和剪枝等問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • 老生常談Python進(jìn)階之裝飾器

    老生常談Python進(jìn)階之裝飾器

    下面小編就為大家?guī)?lái)一篇老生常談Python進(jìn)階之裝飾器。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • python中xlutils庫(kù)用法淺析

    python中xlutils庫(kù)用法淺析

    在本篇文章里小編給大家整理了一篇關(guān)于python中xluntils庫(kù)用法淺析的內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • python讀取excel數(shù)據(jù)繪制簡(jiǎn)單曲線(xiàn)圖的完整步驟記錄

    python讀取excel數(shù)據(jù)繪制簡(jiǎn)單曲線(xiàn)圖的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于python讀取excel數(shù)據(jù)繪制簡(jiǎn)單曲線(xiàn)圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • filter使用python3代碼進(jìn)行迭代元素的實(shí)例詳解

    filter使用python3代碼進(jìn)行迭代元素的實(shí)例詳解

    在本篇文章里小編給大家整理了關(guān)于filter使用python3代碼進(jìn)行迭代元素的實(shí)例詳解內(nèi)容,有興趣的朋友們可以參考下。
    2020-12-12
  • python中3種等待元素出現(xiàn)的方法總結(jié)

    python中3種等待元素出現(xiàn)的方法總結(jié)

    發(fā)現(xiàn)太多人不會(huì)用等待了,小編今天實(shí)在是忍不住要給大家講講等待的必要性,下面這篇文章主要給大家介紹了關(guān)于python中3種等待元素出現(xiàn)的方法,需要的朋友可以參考下
    2022-03-03
  • Python實(shí)現(xiàn)七大查找算法的示例代碼

    Python實(shí)現(xiàn)七大查找算法的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)七大查找算法的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python中的Django視圖與路由

    Python中的Django視圖與路由

    本文給大家介紹Python中的Django視圖與路由的相關(guān)操作,我們就從基礎(chǔ)概念到實(shí)戰(zhàn)代碼,一步步拆解Django視圖與路由的核心知識(shí)點(diǎn),感興趣的朋友一起看看吧
    2025-09-09
  • 關(guān)于python中.xpath的使用問(wèn)題

    關(guān)于python中.xpath的使用問(wèn)題

    根據(jù)xpath定位到了tr,注意瀏覽器自動(dòng)生成了tbody,在python中要把自動(dòng)生成的tbody層級(jí)去掉,這樣要怎么操作呢?下面通過(guò)代碼給大家介紹下python中.xpath的使用問(wèn)題,感興趣的朋友一起看看吧
    2021-11-11

最新評(píng)論