- 簡介
- Python中的Switch語句
- 為什麼Python中沒有switch case語句?
- 如何實現Python Switch Case語句?
- 什麼是PEP 3103?
- 開關箱功能的備選方案
- switch語句的局限性
- 結論
簡介
使用過C語言的計算機軟件編程語言工程師,c++,Java編程開發軟件的語言使用了開關case語句。但在Python中,它們不能使用開關case語句,因為它們不是在Python中定義的。
在本文中,我們將重點介紹switch case語句,因為有許多因素可以解釋為什麼switch case語句比if-else語句更占優勢。這些因素是:
- 與if-else梯子相比,switch語句工作得更快。這是因為編譯器在編譯期間為開關生成了一個跳轉表。作為一個結果,在執行期間,它不是檢查哪個用例得到滿足,而是隻決定必須執行哪個用例。
- Switch語句比if-else鏈更簡潔。
- 它們比if-else鏈更好地表達了代碼的語義。
- 它們比if-else鏈允許的錯誤空間更小。
- 它們減少了重複,並可能提高性能。
- 與if-else語句相比,它提供了更強的可讀性。
想象一下,如果程序員有一種編寫代碼的替代方法,而不是Python中那些複雜的if-else語句,那會怎麼樣呢?如果程序員想避免使用If -else語句造成代碼混亂,那麼他們應該考慮在編碼中使用switch case語句。使用switch case語句的優點已經在上麵提到過了。
Python不像C、c++、Java和Ruby那樣提供開關case語句,但它提供了一些使這些語句工作的規定。
例如,Python允許程序員創建代碼片段,其工作方式與其他編程語言中的Python Switch case語句類似。
本文旨在提供在Python中實現開關case語句的方法。
Python中的Switch語句
開關可以定義為一種控製機製,用於測試存儲在變量中的值並執行相應的case語句。switch case語句的功能是在程序中引入控製流,並確保代碼不會被多個“if”語句弄得亂七八糟。因此,代碼看起來勤勉且透明。這個奇妙的編程特性被程序員用來在他們的代碼中實現控製流。switch case語句的工作是將case語句中指定的值與代碼中的變量進行比較。
為什麼Python中沒有switch case語句?
在Python中,由於建議不理想,switch case語句不存在。許多建議都失敗了,因為它們不能很好地使用Python的語法和既定的編碼風格。
大多數編程語言提供開關case函數,因為它們缺乏適當的映射構造,原因是值不能映射到函數。
但在Python中,在映射表(dict)的幫助下,可以將某個值映射到某個函數。在性能方麵,Python字典將比任何其他解決方案都更有效。
在Python中,使用一個切換器來代替switch case函數。在Python中,切換器也稱為字典映射。
在其他語言中,切換用例是根據用戶的輸入執行的,而在切換程序中,可用選項是根據用戶的輸入執行的。
如何實現Python Switch Case語句?
對於用C、c++或Java等語言編寫代碼的程序員來說,Python不支持開關case語句看起來很奇怪。Python提供了許多替代方法,例如字典、Python lambda函數或用於實現開關case語句的Python類。
程序員應該檢查PEP 3103這樣他們就能理解為什麼Python沒有提供switch case語句的確切原因。
什麼是PEP 3103?
在Python中,PEP代表Python增強建議,其中有很多可用的。PEP可以定義為包含Python新特性的文檔。該文檔還為社區記錄了Python的一些方麵,比如設計和風格。
PEP 3103,版本:$Revision$,是一個switch/case語句,創建於2006年6月25日,發布於2006年6月26日。
這個PEP的存在是為了為語法和語義的不同方麵的許多變體引入規範名稱,例如
“選項1”、“學校II”、“選項3”等。
這一建議因得不到民眾的支持而遭到拒絕。
在深入研究這些備選方案之前,最好先看看其他編程語言中switch-case語句的典型功能。
下麵我們來看看用C語言編寫的程序:
——————————————
switch (DayOfWeek){case 1: printf(" %s ",周一);打破;情況2:printf(" %s ",星期二);打破;case 3: printf(" %s ",星期三);打破;case 4: printf(" %s ",周四);打破;case 5: printf(" %s ", Friday);打破; case 6: printf(“%s”, Saturday); break; case 7: printf(“%s”, Sunday); break; default: printf(“Incorrect Day”); break; }
——————————————
解釋
在上麵提到的程序中,如果輸入是“2”,那麼輸出結果將是“Tuesday”,如果輸入是“6”,那麼輸出結果將是“Saturday”。當輸入從1到7,那麼在這種情況下,輸出結果將是“Incorrect Day”。
開關箱功能的備選方案
現在讓我們轉向Python中switch case函數的替代方法,並通過示例學習這些替代方法是如何工作的。
1.使用字典映射
懂得其他編程語言的程序員一定知道字典是如何工作的。為了在內存中存儲一組對象,字典使用鍵-值對。在Python中,當程序員使用字典作為switch-case語句的替代時,鍵-值對的鍵作為case工作。
下麵的例子演示了使用字典實現switch case語句。
在這個程序中,定義了一個函數month()來打印這個月的第幾周。
讓我們先開始創建case語句,然後為每個case編寫單獨的函數。確保編寫了一個函數來處理默認情況。
——————————————
def monday():返回" monday " def tuesday():返回" tuesday " def wednesday():返回" wednesday " def thursday():返回" thursday " def friday():返回" thursday " def friday():返回" friday " def saturday():返回" saturday " def sunday():返回" sunday " def default():返回" Incorrect Day "
——————————————
下一個操作是用Python創建一個字典對象,並存儲程序中定義的所有函數。
——————————————
Switcher = {0: ' monday ', 1: ' tuesday ', 2: ' wednesday ', 3: ' thursday ', 4: ' friday ', 5: ' saturday ', 6: ' sunday ',}
——————————————
在最後一個操作中,將在程序中創建一個開關函數,該函數將接受一個整數作為輸入,執行字典查找,並調用相應的函數。
——————————————
def day(DayOfWeek):返回switch .get(default)()
——————————————
完整的代碼如下所示:
——————————————
def monday():返回" monday " def tuesday():返回" tuesday " def wednesday():返回" thursday " def friday():返回" friday " def saturday():返回" friday " def saturday():返回" saturday " def sunday():返回" Incorrect Day " switcher = {0: ' monday ', 1: ' tuesday ', 2: ' wednesday ', 3: ' thursday ', 4: ' friday ', 5: ' saturday ', 6: ' sunday ',} def Day (DayOfWeek):返回切換器。get(DayOfWeek, default)() print(switch(1)) print(switch(0))
——————————————
以上代碼輸出以下輸出:
——————————————
周二
周一
——————————————
2.使用Python類
Python類也是一種可用的替代方法,可用於在Python中實現開關case語句。
可以將類定義為包含屬性和方法的對象構造函數。
為了理解這種替代方案,讓我們再次使用上麵提到的示例。
在這個過程中,將在Python開關類中定義一個開關方法。
另外,看看這個免費課程Python的陰謀並增強您對python的知識。
例子
在第一個操作中,將在Python開關類中定義一個開關方法,該開關類將接受每月的星期作為參數,然後將其轉換為字符串。
——————————————
返回getattr(self, ' case_ ' + str(DayOfWeek), lambda: default)()
——————————————
注意:在上麵的例子中使用了兩個東西:關鍵字lambda和getattr()方法。
的λ關鍵字用於在Python中定義匿名函數。Lambda關鍵字的功能是在用戶輸入無效輸入時調用默認函數。
的功能getattr ()方法是調用Python中的函數。現在讓我們為每種情況創建單獨的函數。
——————————————
def monday(self):返回" monday " def tuesday(self):返回" tuesday " def wednesday(self):返回" wednesday " def thursday(self):返回" thursday " def friday(self):返回" friday " def saturday(self):返回" saturday " def sunday(self):返回" sunday "
——————————————
完整的代碼如下所示:
——————————————
類PythonSwitch: def day(self,DayOfWeek): default = "錯誤的一天"返回getattr(self, ' case_ ' + str(DayOfWeek), lambda: default)() def monday(self):返回" monday " def tuesday(self):返回" tuesday " def wednesday(self):返回" wednesday " def thursday(self):返回" thursday " def thursday(self):返回" thursday " def friday(self):返回" friday " def saturday(self):返回" friday " def saturday(self):返回" saturday " def sunday(self):返回" sunday " my_switch = PythonSwitch() print (my_switch.day(1)) print (my_switch.day(6))
——————————————
上麵的代碼輸出以下輸出
——————————————
周一
周六
——————————————
switch語句的局限性
1.沒有規定在開關,以及在情況下使用浮動常數。
2.在這種情況下不能使用變量表達式。
3.不允許在兩個不同的情況下使用相同的常量。
4.關係表達式不能在這種情況下使用。
結論
本文介紹了什麼是開關case語句,可以使用什麼替代開關case語句,以及如何使用它們。
在本文的學習過程中,我們了解到Python沒有提供內置的switch case語句,但是可以使用這些替代方法使代碼更簡潔,從而獲得更好的性能。
如上所述,Python沒有內置開關case函數的功能,但為了使代碼看起來整潔、幹淨並獲得更好的性能,可以使用這些替代方案。
在本文中,我們已盡最大努力盡可能地提供關於開關用例語句的最佳知識。請在下方評論中分享並提供您對本文的寶貴意見。