Python本身并不提供Switch的语法功能,为了能够解决类似switch分支需求的问题,我们可以使用字典代替实现。 
解决思路:

  1. 利用字典取值的get方法的容错性,处理switch语句中的default情况
  2. 设置字典的vlaue为对应方法名,来代替switch语句中的代码块
  3. 为不同key设置相同的value,模拟switch中穿透
def taskForSunday():
    print("今天休息")
def taskForRest():
    print("今天休息")
def taskForChinese():
    print("今天上语文课")
def taskForMath():
    print("今天上数学课")
def taskForEnglish():
    print("今天上英语课")
def taskForDefault():
    print("输入错误啦。。。。")

switchDic = {"Sunday":taskForRest,
            "Monday":taskForChinese,
            "Tuesday":taskForMath,
            "Wednesday":taskForEnglish,
            "Tursday":taskForEnglish,
            "Friday":taskForEnglish,
            "Saturday":taskForRest
}

1.测试取值

通过get获取字典key对应的方法后,又添加了个括号,这样会执行得到的方法

day1 = "Monday"
switchDic.get(day1,taskForDefault)() #打印:今天上语文课

2.测试穿透

##Wednesday,Tursday,Friday三个的效果相同
day2 = "Friday"
switchDic.get(day2,taskForDefault)()  #打印:今天上英语课

3.测试Deault效果

#字典的get方法第二个参数是默认值,即通过key值不能找到value时,返回默认值
#这里使用了自定义函数的函数名:taskForDefault,用于实现switch的defalut功能
day3 = "天气不错哦"
switchDic.get(day3,taskForDefault)() #打印:输入错误啦。。。。

class Switch:    switch = None

    @classmethod    def switch(cls, day):        switchDic = {"Sunday": cls.casetaskForRest,                     "Monday": cls.casetaskForChinese,                     "Tuesday": cls.casetaskForMath,                     "Wednesday": cls.casetaskForEnglish,                     "Tursday": cls.casetaskForEnglish,                     "Friday": cls.casetaskForEnglish,                     "Saturday": cls.casetaskForRest                     }        cls.switch = switchDic.get(day, cls.casetaskForDefault)()        return cls.switch

    @staticmethod    def casetaskForSunday():        print("今天休息")

    @staticmethod    def casetaskForRest():        print("今天休息")

    @staticmethod    def casetaskForChinese():        print("今天上语文课")

    @staticmethod    def casetaskForMath():        print("今天上数学课")

    @staticmethod    def casetaskForEnglish():        print("今天上英语课")

    @staticmethod    def casetaskForDefault():        print("输入错误啦。。。。")

Switch.switch('Sunday')
 

python 数据类型 之 利用 dict 模仿 switch语句功能的更多相关文章

  1. python利用dict模拟switch

    pytho本身并未提供switch语句,但可以通过dict来模拟switch, #方法1 def add(x,y): return x+y def dec(x,y): return x-y def m ...

  2. python初步学习-python数据类型-字典(dict)

    字典 字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起.注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息. 注意,你只 ...

  3. python数据类型之字典(dict)和其常用方法

    字典的特征: key-value结构key必须可hash,且必须为不可变数据类型.必须唯一. # hash值都是数字,可以用类似于2分法(但比2分法厉害的多的方法)找.可存放任意多个值.可修改.可以不 ...

  4. Python—数据类型之字典(Dict)

    其它数据类型转成字典 arr1 = ['jack', 'rose', 'marry'] arr2 = [68, 85, 66] dict1 = dict(zip(arr1, arr2)) print( ...

  5. Python数据类型--字典(dict)

    Python中的字典是键值对(key-value)的无序集合.每个元素包含"键"和"值"两部分,这两部分之间使用冒号分隔,表示一种对应关系.不同元素之间用逗号分 ...

  6. python小练习,利用dict,做一个简单的登录。

    '''利用字典实现登录'''users=[{'username':'jerry','pwd':'123456'},{'username':'tom','pwd':'1'}] def login(use ...

  7. Python学习 之 switch语句

    1.python并没有提供switch语句,python可以通过字典实现switch语句的功能,实现方法分为两步 —首先,定义一个字典 —其次,调用字典的get()获取相应的表达式 通过字典调用函数 ...

  8. 利用switch语句计算特定的年份的月份共有几天。

    //利用switch语句计算特定的年份的月份共有几天. let year =2015 let month =2 //先判断闰年中二月份的情况 ifmonth ==2 { if (year %400 = ...

  9. Java中的switch语句后面的控制表达式的数据类型

    Java中的switch语句后面的控制表达式的数据类型 1.byte 2.char 3.short 4.int 5.枚举类型 6.Java 7允许java.lang.String类型

随机推荐

  1. Uni2D 入门 -- Atlas转载 http://blog.csdn.net/kakashi8841/article/details/17588095

    转载csdnTexture Atlas 我为什么应该使用Texture Atlas? 使用Atlas是一个普遍的好做法,而且它有很多好处.当有某些需要在屏幕渲染的时候,它背后带来的是draw call ...

  2. PageRank算法和谷歌搜索讲解

    PageRank算法和谷歌搜索讲解 吴裕雄 PageRank算法实际上就是Google使用它来计算每个网页价值的算法. Google每次的搜索结果都有成百上千万甚至上亿个相关的查询网页链接.如果将所有 ...

  3. java容器的理解(collection)

    容器类(Conllection)对于一个开发者来说是最强大的工具之一,可以大幅提高编程能力.容器是一个将多个元素组合到一个单元的对象,是代表一组对象的对象,容器中的对象成为它的元素. 容器适用于处理各 ...

  4. zxing全屏识别(v2.5.0崩溃问题记录)

    自己遇到的问题:/** * Like {@link #getFramingRect} but coordinates are in terms of the preview frame, * not ...

  5. React DevTools

    [React DevTools] 在应用商店搜索安装.F12可打开.如果是react应用,在最右排会显示react标签. 参考:https://github.com/facebook/react-de ...

  6. 在Plesk安装PHP的Memcached扩展

    默认情况下,Plesk的PHP没有Memcached扩展,需要自己安装. Plesk-without-memcached,在Plesk下安装PHP Memcached扩展 PHP Memcache是​ ...

  7. 第十章 优先级队列 (a1)需求与动机

  8. CentOS NFS服务器的搭建与配置

    1.查看系统是否已安装NFS [root@bogon ~]# rpm -qa | grep nfs [root@bogon ~]# rpm -qa | grep rpcbind 2.安装NFS [ro ...

  9. LibreOJ 6277. 数列分块入门 1

    题目链接:https://loj.ac/problem/6277 参考博客:https://www.cnblogs.com/stxy-ferryman/p/8547731.html 两个操作,区间增加 ...

  10. TOJ 3850: String Function Encoding

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3850 时间限制(普通/Java): ...