2019年9月6日 星期五

Python 網路上流傳使用 字典(dict)來實現 Case/Switch 功能,真的實用嗎

Python 是沒有Case語句的 (至少目前最新的版本v3.7是這樣)

那有什麼方式能夠實現呢?

首先,先來複習Case語句吧


那今天就依照下面的功能來做範例


方法1
其中一個方法就是眾所皆知的 if ... elif ... else
範例如下:


這樣的方法非常直觀,缺點就是每個判斷式都要寫state == ?
如果要仿造出其他程式語言的case語句,也是可行的
在那之前要先來學學Python中的字典(dict)

字典(dict)
輸出 :

建立字典只要記住格式與由左而右做查詢的規則即可

直接使用查詢的方式缺點的缺點是,當你丟入沒有設定的值,會直接跳Error



所以這時候應該使用這個方法 :


字典的get方法 :
第一個位置:要丟入的值
第二個位置:當你丟入沒有設定的值,會回傳這個位置的東西

所以我們把這個方法做成副程式方便調用 :
稍微整理一下比較好看 :


進階整理 :(執行結果一樣)
這邊主要是把副程式換個名字,然後不給字典名稱(我們之前把字典取名為state)
要看懂這邊的整理,後面會用到



可以看到似乎已經達到我們一開始講的功能了
但是有些人就有疑問了,人家的case不只有print的功能阿
所以再加以改造一下...

這樣在副程式裡面就可以打上任何你想執行的程式碼

優點
應該會有人覺得這樣並沒有比較好維護
那這樣的方法存在優點嗎?

所以我測試了執行時間
為了更準確的測試,我把print改成pass,避免print時間影響到結果


可以看到方法1除了很直觀以外,執行時間也較短
但這樣的結果我並不滿意,為什麼華麗的用法反而有反效果
所以我稍微修改程式(預先建立字典)


還是輸了!
於是我再改!



看來網路上流傳的"實現case方法",除了美觀...應該也沒啥作用了

在此附上最終程式碼...
https://drive.google.com/file/d/1YnXfinZLRzVHSn6wg9RyxIfdwulX2BQn/view?usp=sharing




沒有留言:

張貼留言