Python模式匹配match case的實現(xiàn)
核心概念
當(dāng)程序需要針對一個變量的多種可能值進行判斷時,傳統(tǒng)的 if ... elif ... elif ... else 結(jié)構(gòu)會變得冗長且可讀性較差。Python 3.10 引入了 match 語句(也稱為模式匹配),它提供了一種更簡潔、更直觀的方式來處理多分支條件判斷。
1. 基本match語句
- 功能:將一個目標(如變量)與一系列模式(
case)進行比較,并執(zhí)行第一個匹配成功的分支。 - 與傳統(tǒng)if對比:
- if 寫法 (冗長):
score = 'B' if score == 'A': print('score is A.') elif score == 'B': print('score is B.') elif score == 'C': print('score is C.') else: print('invalid score.') - match 寫法 (清晰):
score = 'B' match score: case 'A': print('score is A.') case 'B': print('score is B.') case 'C': print('score is C.') case _: # `_` 是通配符,匹配任何值 print('invalid score.')
- if 寫法 (冗長):
- 關(guān)鍵點: -
case _:必須放在最后,用于捕獲所有未被前面 case 匹配的情況,類似于else。- 語法結(jié)構(gòu)更加規(guī)整,意圖更明確。
2. 復(fù)雜匹配模式
match 的強大之處在于其靈活的匹配模式,遠不止簡單的相等判斷。
- 帶守衛(wèi)條件的匹配:使用
if在case內(nèi)進行額外條件檢查。 - 多值匹配:使用
|(或)來匹配多個值。 - 值綁定:在匹配的同時,將匹配到的值捕獲到變量中。
示例:
age = 15
match age:
case x if x < 10: # 匹配所有小于10的值,并將其綁定到變量x
print(f'< 10 years old: {x}')
case 10: # 精確匹配單個值
print('10 years old.')
case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18: # 匹配多個值
print('11~18 years old.')
case 19:
print('19 years old.')
case _:
print('not sure.')
3. 高級應(yīng)用:匹配列表(解包匹配)
match 語句可以匹配復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如列表,并能進行解包操作,這使其功能非常強大。
示例:解析命令行參數(shù)
args = ['gcc', 'hello.c', 'world.c'] # 模擬用戶輸入的命令
match args:
# 模式1: 列表只包含一個元素'gcc'
case ['gcc']:
print('gcc: missing source file(s).')
# 模式2: 列表第一個元素是'gcc',第二個是任意值(綁定到file1),后面是0個或多個值(綁定到files)
case ['gcc', file1, *files]:
print(f'gcc compile: {file1}, {", ".join(files)}')
# 模式3: 列表只包含一個元素'clean'
case ['clean']:
print('clean')
# 默認情況
case _:
print('invalid command.')
*files:這是一個通配符,它可以捕獲列表中的零個或多個剩余元素。這使得匹配可變長度的列表變得非常簡單。- 工作原理:
match會按順序嘗試匹配每個case的模式。例如,對于['gcc', 'hello.c', 'world.c'],它會匹配第二個模式,并賦值file1 = 'hello.c'和files = ['world.c']。
總結(jié)要點
- 為什么使用
match:替代冗長的if-elif-else鏈,極大地提高代碼的可讀性和簡潔性,尤其是在處理多個枚舉值或復(fù)雜數(shù)據(jù)結(jié)構(gòu)時。 - 基本語法:使用
match TARGET:和一系列case PATTERN:進行匹配。 - 強大功能:
- 精確匹配:
case 'A': - 或匹配:
case 11 | 12 | 13: - 守衛(wèi)條件:
case x if x < 10: - 通配符:
case _:(匹配任何值) - 解包匹配:
case ['cmd', arg1, *args]:(匹配并提取列表內(nèi)容)
- 精確匹配:
- 適用場景:處理狀態(tài)碼、命令解析、處理JSON或嵌套數(shù)據(jù)等任何需要多分支判斷的場景。
match 語句是Python現(xiàn)代化的重要特性,掌握它可以讓你的代碼更加優(yōu)雅和Pythonic。
將之前的練習(xí)題 重新寫一寫
hight = 1.50
weight = 50.5
bmi = weight / hight ** 2
print("bmi=", bmi)
match bmi:
case _ if bmi < 18.5:
print("過輕")
case _ if 18.5 <= bmi < 25:
print("正常")
case _ if 25 <= bmi < 28:
print("過重")
case _ if 28 <= bmi < 32:
print('肥胖')
case _:
print("嚴重肥胖")
到此這篇關(guān)于Python模式匹配match case的實現(xiàn)的文章就介紹到這了,更多相關(guān)Python模式匹配match case內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中Async語法協(xié)程的實現(xiàn)
這篇文章主要介紹了Python中Async語法協(xié)程的實現(xiàn),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06
如何利用python開發(fā)一款日志自動查找復(fù)制小工具
本文介紹使用Python開發(fā)日志篩選工具,自動復(fù)制符合時間范圍(02:00-20:00)和大?。?gt;1KB)的日志至桌面,提升效率并減少遺漏,工具通過PyInstaller打包為exe,支持自定義圖標與版本信息2025-09-09

