本文主要介紹Python 3.10帶來的新特性——
match
語句。
在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])
運行結果:
可以看到,輸出結果正是我們想要的“case 1”的結果。
在Python 3.10出現之前,我們更多的是通過上面這種字典映射的方式,來實現類似於switch
語句的功能。但是伴隨着Python 3.10的發布,Python也終於迎來了自己的'switch'語句,也就是接下來我們重點介紹的match
語句。
Python 3.10 新特性—— match 語句
在運行以下代碼之前,請先確保自己的Python版本大於等於3.10。
和其他語言一樣,當變量a
滿足哪個case
的條件時,就會執行該條件下的對應代碼:
a = 1
match a:
case 1:
print('case 1')
case 2:
print('case 2')
運行結果:
默認分支
當變量a
不滿足任意一個case
條件時,如果我們沒有對“其他“情況進行處理,那么是不會執行任何操作的。
下面的代碼是不會有任何輸出的,因為a
不滿足任意一個條件:
a = 3
match a:
case 1:
print('case 1')
case 2:
print('case 2')
如果想要對”其他“情況進行處理,那么寫法如下:
a = 3
match a:
case 1:
print('case 1')
case 2:
print('case 2')
case default:
print('case default', default)
運行結果:
可以看到,當變量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)
運行結果:
可以看到,變量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)
運行結果:
由於第二個分支條件中if flag
為False
,不符合條件,所以代碼進入到最后一個分支條件中。
小結
以上就是今天介紹的如何使用字典實現switch
語句,以及最最重要的Python 3.10的新特性——match
語句。
當然,現階段並不建議在你的Python項目中使用該新特性,因為目前主流的Python版本還不支持該特性,為了避免不必要的麻煩,還是只能先使用字典映射的方式實現了。