Python中如何实现Switch/Case语句?

点击上方“背锅侠Tester”,从陌生到恋爱的感觉~

听说看超哥的文章会上瘾

不要把工作当作生活的工具,把工作当生意做;

愿自己身体健健康康家人平安

祝各位同上,2019更精彩@all

-Tester-也哥-

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

文部分来源网络,如有侵权请第一时间联系删除。

02

相关推荐

linux+python+django环境搭建/启动服务

来一场Python冲顶大会吧

编程路上,必不可少的编程技巧

Fiddler抓包工具介绍&使用

03

公众号简介

1.本订阅号专业抓取各大公司经典面试题,定期推送,欢迎投稿。

2.测试从业者各项知识技术文档推送学习【自动化】【性能】【linux】【数据库】【安全】【python】【git】【面试】【领书】等

3.不定期在测试技术招聘群发送各大公司的招聘需求/推送红包/送书等活动;

& 看完本文有收获?请转发分享给更多人;点击【好看】,分享给更多朋友:);

& +微信: shichaogg  入技术、招聘群,做顶级背锅侠   

& 请认准【背锅侠Tester】长按扫描下方二维码进行关注查阅更多精彩好文,领取资料。

04

长按下方二维码关注超哥

如果你也是只刺猬

请拥抱我

           

                                  

                                               点击【好看】分享给更多朋友

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值