如何在 Python 中實現 Switch Case 函數? [2022]
已發表: 2021-01-08目錄
介紹
你有沒有想過是否有替代方法來用 Python 編寫那些複雜的 If-else 語句? 如果您不希望多個“If”語句使代碼混亂,則應考慮使用 Switch case 語句,該語句提供了一種更簡潔、更快捷的方式來在代碼中實現控制流。 與 C++、Java、Ruby 和其他編程語言不同,Python 不提供 switch case 語句,但它提供了一些解決方法來使該語句工作。
例如,Python 允許您創建代碼片段,其工作方式類似於其他編程語言中的Python Switch case語句。 您將在本博客後面部分了解更多關於實現 switch-case 語句的方法。 如果您有興趣了解有關 python 的更多信息,請查看我們的數據科學課程。
什麼是 Python 中的 Switch 語句?
一般來說,switch 是一種控制機制,它測試存儲在變量中的值並執行相應的 case 語句。 Switch case 語句在您的程序中引入控制流,並確保您的代碼不會被多個“if”語句弄亂。
因此,您的代碼對查看者來說看起來細緻而透明。 這是程序員用來在其代碼中實現控制流的絕妙編程特性。 Switch case 語句通過將 case 語句中指定的值與代碼中的變量進行比較來工作。
如何實現 Python Switch Case 語句
如果您一直使用 C++ 或 Java 等語言進行編碼,您可能會覺得 Python 沒有 switch case 語句很奇怪。 相反,Python 提供了許多解決方法,例如字典、Python 類或 Python lambda 函數來實現 switch-case 語句。
如果您想知道在 python 中沒有 switch case 語句的確切原因,那麼您應該檢查PEP 3103 。
在深入研究這些替代方案之前,讓我們先看看 switch case 函數在其他編程語言中通常是如何工作的。
在下面的示例中,我們使用了 C 編程語言
開關(年月){ 情況1: printf(“%s”, 一月); 休息; 案例2: printf(“%s”, 二月); 休息; 案例3: printf(“%s”, 三月); 休息; 案例4: printf(“%s”, 四月); 休息; 案例5: printf(“%s”, 五月); 休息; 案例6: printf(“%s”, 六月); 休息; 案例7: printf(“%s”, 七月); 休息; 案例8: printf(“%s”, 八月); 休息; 案例9: printf(“%s”, 九月); 休息; 案例 10: printf(“%s”, 十月); 休息; 案例 11: printf(“%s”, 十一月); 休息; 案例 12: printf(“%s”, 十二月); 休息; 默認: printf(“月份不正確”); 休息; } |
現在,讓我們更深入地了解Python switch case函數的替代方案,並藉助示例了解這些替代方案是如何工作的。
閱讀: Python 中的職業機會:您需要知道的一切
使用字典映射
如果您熟悉其他編程語言,那麼您一定知道字典使用鍵值對將一組對象存儲在內存中。 當您使用字典作為 switch-case 語句的替代方案時,鍵值對的鍵作為 case 工作。
以下示例顯示了使用字典的 switch case 語句的實現。 在這裡,我們定義了一個函數 month() 來打印一年中的哪個月。
首先,首先創建案例語句並為每個案例編寫單獨的函數。 確保您編寫了一個處理默認情況的函數。
定義一月(): 返回“一月” 定義二月(): 返回“二月” 定義遊行(): 返回“三月” 定義四月(): 返回“四月” 定義可能(): 返回“可能” 定義六月(): 返回“六月” 定義七月(): 返回“七月” 默認八月(): 返回“八月” 定義九月(): 返回“九月” 十月(): 返回“十月” 定義十一月(): 返回“十一月” 定義十二月(): 返回“十二月” 默認值(): 返回“錯誤的月份” |
接下來,在 Python 中創建一個字典對象並存儲您在程序中定義的所有函數。
切換器 = { 0: '一月', 1:“二月”, 2:“三月”, 3:“四月”, 4:“可能”, 5:“六月”, 6:“七月”, 7:“八月”, 8:“九月” 9:“十月”, 10:“十一月”, 11:“十二月” } |
最後,在你的程序中創建一個 switch 函數,它應該接受整數作為輸入,執行字典查找,並調用相應的函數。
def 月(年月): return switcher.get(monthOfYear, default)() |
完整的代碼將如下所示
定義一月(): 返回“一月” 定義二月(): 返回“二月” 定義遊行(): 返回“三月” 定義四月(): 返回“四月” ![]() 定義可能(): 返回“可能” 定義六月(): 返回“六月” 定義七月(): 返回“七月” 默認八月(): 返回“八月” 定義九月(): 返回“九月” 十月(): 返回“十月” 定義十一月(): 返回“十一月” 定義十二月(): 返回“十二月” 默認值(): 返回“錯誤的月份”
切換器 = { 0: '一月', 1:“二月”, 2:“三月”, 3:“四月”, 4:“可能”, 5:“六月”, 6:“七月”, 7:“八月”, 8:“九月” 9:“十月”, 10:“十一月”, 11:“十二月” } def 月(年月): return switcher.get(monthOfYear, default)() 打印(開關(1)) 打印(開關(0)) |
上面的代碼打印以下輸出
二月 一月 |
另請閱讀: 42 個令人興奮的 Python 項目創意和適合初學者的主題
使用 Python 類
您還可以使用 Python 類作為實現 switch-case 語句的替代方法。 類是具有屬性和方法的對象構造函數。 讓我們藉助上述相同的示例進一步理解這一點。 在這裡,我們將在 Python switch 類中定義一個 switch 方法。
例子
首先,我們將在 Python switch 類中定義一個 switch 方法,該方法將一年中的一個月作為參數,將結果轉換為字符串。
類 PythonSwitch: def 月(自我,年月): 默認=“錯誤的月份” return getattr(self, 'case_' + str(monthOf Year), lambda: default)() |
注意:在上面的例子中,我們使用了兩個東西:關鍵字 lambda 和 getattr() 方法。
- 我們使用 lambda 關鍵字在 Python 中定義匿名函數。 當用戶輸入無效輸入時,Lambda 關鍵字調用默認函數。
- getattr() 方法用於調用 Python 中的函數。
現在,為每種情況創建單獨的函數。
定義一月(自己): 返回“一月”
def 2 月(自己): 返回“二月” def 遊行(自我): 返回“三月”
定義四月(自我): 返回“四月”
def 可能(自己): 返回“五月”
定義六月(自我): 返回“六月” 七月(自我): 返回“七月”
默認八月(自我): 返回“八月”
def 九月(自我): 返回“九月” def 十月(自我): 返回“十月”
def 十一月(自己): 返回“十一月”
def 十二月(自我): 返回“十二月” |
完整的代碼將如下所示
類 PythonSwitch: def 月(自我,年月): 默認=“錯誤的月份” return getattr(self, 'case_' + str(monthOf Year), lambda: default)() 定義一月(自己): 返回“一月”
def 2 月(自己): 返回“二月”
def 遊行(自我): 返回“三月”
定義四月(自我): 返回“四月”
def 可能(自己): 返回“五月”
定義六月(自我): 返回“六月” 七月(自我): 返回“七月”
默認八月(自我): 返回“八月”
def 九月(自我): 返回“九月” def 十月(自我): 返回“十月”
def 十一月(自己): 返回“十一月”
def 十二月(自我): 返回“十二月” my_switch = PythonSwitch() 打印 (my_switch.month(1)) 打印(my_switch.month(10)) |
上面的代碼打印以下輸出
一月 十月 |
查看:印度的 Python 開發人員薪水
結論
在本博客中,您了解了 switch-case 語句、switch-case 語句的替代方案以及如何使用它們。 如上所述,Python 沒有內置的 switch case 函數,但是您始終可以使用這些替代方法來使您的代碼看起來整潔並獲得更好的性能。
如果您想了解數據科學,請查看 IIIT-B 和 upGrad 的數據科學執行 PG 計劃,該計劃是為在職專業人士創建的,提供 10 多個案例研究和項目、實用的實踐研討會、行業專家的指導、1與行業導師一對一,400 多個小時的學習和頂級公司的工作協助。
區分普通字典和 Python 字典。
Python 字典或“Dict”是 Python 的內置數據結構,用於存儲無序的元素集合。 與其他存儲單個值的 Python 數據結構不同,字典數據結構存儲鍵值對,其中每個鍵都是唯一的。 它不記得鍵值對的插入順序並遍歷鍵。 另一方面,Ordered Dictionary 或 OrderedDict 會跟踪鍵值對的插入順序。 由於它的雙向鍊錶實現,它還比 Python 中的常規字典消耗更多的內存。 如果您刪除並重新插入相同的鍵,它將被插入到原來的位置,因為 OrderedDict 會記住插入順序。
namedtuple 的哪些操作使其成為用於 switch 案例的便捷選項?
Python 中的 namedtuple 執行各種操作。 以下是 namedtuple 執行的一些最常見操作的列表。 與字典不同,命名元組中的元素可以通過它們的索引來訪問。 訪問元素的另一種方法是通過它們的鍵名。 make() 函數返回一個命名元組。 _asadict() 函數返回從映射值構造的有序字典。 _replace() 函數將鍵名作為其參數並更改映射到它的值。 _fileds() 函數返回給定命名元組的所有鍵名。
我們什麼時候更喜歡使用列表來存儲數據?
Python列表被認為是在以下場景中存儲數據的最佳數據結構 - 列表可用於存儲具有不同數據類型的各種值,並且可以僅通過它們各自的索引來訪問。 當您需要對元素執行數學運算時,可以使用列表,因為它允許您直接對元素進行數學運算。 由於列表可以調整大小,因此當您不確定要存儲的元素數量時,可以使用它來存儲數據。 列表元素很容易可變,並且它還可以存儲重複元素,這與集合和字典不同。