python3.10 新增的 match case 語句


python 3.10 新增的 math case 語句

python 3.10 中新加了一個匹配語句,類似於其他如Java中的 switch... case... ,它可以方便的匹配你想要的內容。可以作為一部分 if...elif...else 的替代品,並且減少代碼量。

下面是一個使用 match...case...if...elif...else 的對比,兩者做的事情相同。

# if else
names = ['zhao', 'qian', 'sun', 'slsls']
for name in names:
    if name == 'zhao':
        print('趙')
    elif name == 'qian':
        print('錢')
    elif name == 'sun':
        print('孫')
    else:
        print('未知姓氏')

# match case
for name in names:
    match name:  # match 后面跟要匹配的對象
        case 'zhao':  # 一旦某個 case 匹配上了,不會繼續執行下面的其他 case
            print('趙')
        case 'qian':
            print('錢')
        case 'sun':
            print('孫')
        case _:  # _ 捕獲其他未涵蓋的情況
            print('未知姓氏')

簡單教程:

官方教程鏈接

1. 匹配序列

a = [1, 2, 3]
match a:
    case [1]:
        print("匹配 [1]")
    case [1, obj]:
        print("匹配長度為2的列表,且列表的第一個元素是1,第二個元素不限,並用 obj 作為第二個元素的別名,若能匹配上,可以通過obj變量獲取第二個元素內容", obj)
    case [1, *obj]:
        print("匹配長度大於等於1的列表,且列表第一個元素是1,后面可以有多個元素,也可以沒有任何元素", obj)
    case [1, (2|3), 3]:
        print("| 代表 or;(2|3)代表列表的第二個元素要么是2,要么是3")
    case [1, (2|3) as second, 3]:
        print("和上一個一樣,只不過給第二個元素綁定了一個別名:second,如果匹配上,可以通過 second 變量獲取第二個元素", second)
    case [1, 2] | [1, 2, 3]:
        print('匹配 [1,2] or [1,2,3]')
    case [1, second, 3] if second == 2:
        print('帶有限制條件的匹配,后面的 if 條件滿足了,才會進行匹配')
    case _:
        print('_ 代表匹配其他情況,類似於 if...else.. 語句中的 else')

2. 匹配對象

class A(object):
    def __init__(self, x, y=None):
        self.x = x
        self.y = y
a = A(1, 1)
b = A(2, 2)
c = A(3)  # 使用了默認參數
obj = [a, b, c]
for i in obj:
    match i:
        case A(x=1, y=1):  # 此處不能直接寫實例化的對象,要寫 類名(參數,..)
            print('匹配實例化類時,參數x=1, y=1 的對象')
        case A(x=3):
            print('匹配實例化類時,參數x=3,y使用了默認值的對象')
        case A(x=first, y=second):
            print("匹配參數為任意值的實例化對象,first,second兩個變量,可以方便的獲取對象 x,y 屬性實際存儲的值",first, second)

3. 匹配字典

a = {'name': 'wang', "age": 22}
b = {'name': b'zhang', 'age': "33"}
c = {'name': b'zhao', 'age': 23}
ls = [a, b, c]
for i in ls:
    match i:
        case {"name": name, 'age': int(age)}:  # int(age) 代表匹配 age 字段是整數類型的值,name 字段沒有規定,所以任意類型都會匹配
            print(f"匹配 age 是整數類型的:{name},{age}")
        case {"name": name, "age": str(age)}:
            print(f'匹配 age 是字符串類型的:{name},{age}')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM