首頁 > 軟體

Python3.10新特性之match語句範例詳解

2023-02-10 06:01:17

正文

在Python 3.10釋出之前,Python是沒有類似於其他語言中switch語句的,要實現類似的功能最簡單的方法就是通過if ... elif ... else ...語句,但是這樣畢竟不夠優雅,不夠“Pythonic”

更推薦的做法是通過字典(dict)實現。

通過字典間接實現 switch

想要通過字典來實現條件分支語句,首先我們需要定義一個字典,來表示不同case和返回值/函數之間的對映關係,然後再利用字典的特性,即可以實現類似於switch的功能。下面定義一個簡單的函數,傳入不同的case就會列印不同的內容,也可以將列印內容的語句替換成你想要執行的函數:

def switch(case):
    mapping = {
        1: "print('case 1')",
        2: "print('case 2')"
    }
    return eval(mapping[case])
switch(1)
執行結果:
case 1

可以看到,輸出結果正是我們想要的“case 1”的結果。

在Python 3.10出現之前,我們更多的是通過上面這種字典對映的方式,來實現類似於switch語句的功能。但是伴隨著Python 3.10的釋出,Python也終於迎來了自己的'switch'語句,也就是接下來我們重點介紹的match語句。

Python 3.10 新特性—— match 語句,參考資料:Python 3.10增加了比switch更強大的match表示式在執行以下程式碼之前,請先確保自己的Python版本大於等於3.10。和其他語言一樣,當變數num滿足哪個case的條件時,就會執行該條件下的對應程式碼:

num = 5
match num:
    case 10:
        print('you lose')
    case 5:
        print('you win')
執行結果:
you win

當預設分支#當變數a不滿足任意一個case條件時,如果我們沒有對“其他“情況進行處理,那麼是不會執行任何操作的。

下面的程式碼是不會有任何輸出的,因為a不滿足任意一個條件:

num = 3
match num:
    case 1:
        print('num 1')
    case 2:
        print('num 2')
無輸出
如果想要對」其他「情況進行處理,那麼寫法如下:
num = 3
match num:
    case 1:
        print('num 1')
    case 2:
        print('num 2')
    case default:
        print('case default', default)
執行結果:
case default 3

可以看到,當變數a不符合任意一個條件時,就會執行到我們的default分支,同時會把變數值賦值給default變數。注意:這裡的default僅僅只是一個變數名而已,並非規定寫法,也可以使用其他變數名,例如x等。其作用就是在變數不符合任意一個分支條件時,將變數值賦值給該變數。

在case中使用元組

Python的match語句不僅支援數值型別的分支,也支援其他資料型別,例如元組(tuple)

a = (2, 4)
match a:
    case (1, 2):
        print('case 1')
    case (2, x):
        print('case 2', x)
執行結果:
case 2 4

可以看到,變數a在匹配到第二個分支條件時,還把元組的第二個元素值4賦值給了變數x。在case中使用判斷語句#不僅如此,match語句還支援在分支條件中插入判斷語句:

a = (2, 2)
flag = False
match a:
    case (1, 2):
        print('case 1')
    case (2, x) if flag:
        print('case 2', x)
    case default:
        print('case default', default)
執行結果:
case default (2, 2)

由於第二個分支條件中if flag為False,不符合條件,所以程式碼進入到最後一個分支條件中。

以上就是Python3.10新特性之match語句範例詳解的詳細內容,更多關於Python3.10特性match語句的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com