相信玩過幾天 python 的小伙伴都知道,python 里并沒有 switch 關鍵字實作,那這是為什么呢?
根據官方說法 PEP 3103 - A Switch/Case Statement.
實作 switch case 需要被判斷的變數是可哈希和可比較的,這與 python 提倡的靈活性有沖突,在實作上優化不好做,可能到最后最差的情況匯編出來和 if else 組是一樣的,所以 python 沒有支持
但是沒有 switch 關鍵字,不代表不能實作類似效果,接下來通過幾個小程式來說明此類問題
if else 判斷
我們通過最常用的 if else 判斷來實作一段代碼
def matching_if(type):
if type == 0:
return '優惠1塊錢'
elif type == 1:
return '優惠10塊錢'
elif type == 2:
return '優惠100塊錢'
return '無優惠'
if __name__ == '__main__':
print(matching_if(1))
print(matching_if(999))
執行結果如下:
'''
列印輸出:
優惠10塊錢
無優惠
'''
dict 字典
可以使用字典實作 switch case,這種方式易維護,同時也能夠減少代碼量,如下是使用字典模擬的 switch case 實作:
def matching_dict(type):
types = {
0: '優惠1塊錢',
1: '優惠10塊錢',
2: '優惠100塊錢'
}
return types.get(type, '無優惠')
if __name__ == '__main__':
print(matching_dict(1))
print(matching_dict(999))
代碼從整體上看著簡潔了很多,那還有沒有別的方式呢?
函式判斷
函式判斷從代碼數量來說并無優勢,優勢點在于其靈活性,如果根據不同的型別作出大量操作,函式運算無疑是最優的方式
def one():
return '優惠1塊錢'
def two():
return '優惠10塊錢'
def three():
return '優惠100塊錢'
def default():
return '無優惠'
def matching_method(type):
types = {
0: one,
1: two,
2: three
}
method = types.get(type, default)
return method()
if __name__ == '__main__':
print(matching_method(1))
print(matching_method(999))
優雅的代碼是程式員的追求之一,作者本人也有一定程度的代碼潔癖,所以涉及此類應用,會選擇第二種 dict 字典型別應用
lambda 函式
這里推出一款 lambda 配合 dict 字典的方式,可以對運算條件作出更為精準的計算
def matching_lambda(type):
matching_dict = lambda x: {
x == 0: '優惠1塊錢',
x == 1: '優惠10塊錢',
x == 2: '優惠100塊錢'
}
return matching_dict(type)[True]
if __name__ == '__main__':
print(matching_lambda(1))
print(matching_lambda(2))
結言
由于作者水平有限, 歡迎大家能夠反饋指正文章中錯誤不正確的地方, 感謝 🙏
小伙伴的喜歡就是對我最大的支持, 如果讀了文章有所識訓, 希望能夠 點贊、評論、關注三連!
推薦閱讀:
- 【強烈推薦】1w 字,18 張圖,徹底說清 springboot starter
- 【強烈推薦】謹慎使用 JDK 8 新特性并行流 ParallelStream
- 【強烈推薦】一文快速掌握 Redisson 如何實作分布式鎖原理
- 【大廠面試真題】JDK 執行緒池中如何不超最大執行緒數快速消費任務
- 【大廠面試真題】JDK 執行緒池如何保證核心執行緒不被銷毀
作者麻花,坐標帝都 Java 后端研發,勵志成為架構師的一枚處女座程式員,專注高并發、框架底層原始碼、分布式等知識分享
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/237617.html
標籤:其他
上一篇:基于阿里云IaaS的基礎應用架構
下一篇:總結一下2020年讀了幾本書
