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那些事

文部分來源網路,如有侵權請第一時間聯繫刪除。