Python中如何實現Switch/Case語句?
- 2019 年 11 月 20 日
- 筆記
01
跟其它語言有所區別,Python中並沒有Switch/Case語句。那麼,該如何實現Switch/Case語句呢?
我們通過一個示例看。將數字1,2,3,4映射為Spring,Summer,Fall,Winter,而其它數字映射為Invalid Season。Java程式碼中可以用Switch/Case語句來實現:
public static String getSeason(int season) { String SeasonName = ""; switch (season) { case 1: SeasonName = "Spring"; break; case 2: SeasonName = "Summer"; break; case 3: SeasonName = "Fall"; break; case 4: SeasonName = "Winter"; break; default: SeasonName = "Invalid Season"; break; } return SeasonName; }
而Python中沒有Switch/Case語句,那麼該如何實現呢?
應該有兩種實現方式,第一種是通過 if… elif… elif… else 來實現,大家應該比較熟悉,程式碼如下:
def getSeason(season): """ 將season映射為字元串 :param season: :return: """ if season == 1: return "Spring" elif season == 2: return "Summer" elif season == 3: return "Fall" elif season == 4: return "Winter" else: return "Invalid Season"
第二種方式,也是比較好的一種方式,小編極力推薦的一種方式,也是更Pythonic的一種寫法,是通過字典(dict)來進行實現的:
seasondict = { 1: "Spring", 2: "Summer", 3: "Fall", 4: "Winter" } def getSeason(season): """ 將season映射為字元串 :param season: :return: """ return seasondict.get(season, "Invalid Season")
是不是程式碼更為簡潔易懂?
那麼,如果case中是執行不同的方法,而不是簡單的返回字元串,有沒有辦法實現呢?
答案是必須的,可以通過 if… elif… elif… else 來實現,其中的每個分支調用不同的函數,這裡不再贅述。也可以通過字典來實現的,主要看一下字典的實現方式:
def Season1(): return "Spring" def Season2(): return "Summer" def Season3(): return "Fall" def Season4(): return "Winter" def Default(): return "Invalid Season" seasondict = { 1: Season1, 2: Season2, 3: Season3, 4: Season4 } def getSeason(season): """ 將season映射為字元串 :param season: :return: """ fun = seasondict.get(season, Default) return fun()
這種方式需要單獨定義dict來完成函數的映射,還有一種方式,即通過在類中定義不同的方法(方法名有一定的規則),然後通過getattr函數來進行實現,程式碼如下:
class Season(): def Season1(self): return "Spring" def Season2(self): return "Summer" def Season3(self): return "Fall" def Season4(self): return "Winter" def Default(self): return "Invalid Season" def getSeason(self, season): """ 將season映射為字元串 :param season: :return: """ season_name = "Season" + str(season) fun = getattr(self, season_name, self.Default) return fun()
Python中的這些實現Swith/Case的方法你都清楚了嗎?
本文來自公眾號:python那些事
文部分來源網路,如有侵權請第一時間聯繫刪除。