拓展:switch实现

参考中谷教育 python视频:switch

 switch语句用于编写多分支结构的程序,类似于if ... elif ...else语句。
switch语句表达的分支结构比if...elif...else语句表达的更清晰,代码的可读性更高
但是,python并没有提供switch语句 !!
python可以通过字典实现switch语句的功能,实现方法分为两步:
——首先定义一个字典。
——其次,调用字典里的get()获取响应的表达式。
 
通过字典调用函数:
{1:case1,2:case2}.get(x,lambda *arg,**key:)()       这语句比较难理解。通过例子来说明:

简单的计算器:
用if语句判断加减乘除

 
#计算器至少涉及4种运算,+ - * /
#引入一个模块,解决运算的数据类型问题
 
from __future__ import division
 
def jia(x,y):
    return(x + y)
 
def jian(x,y):
    return(x - y)
 
def cheng(x,y):
    return(x * y)
 
def chu(x,y):
    return(x / y)
 
def operator(x,o,y):
    if o == '+':
        print(jia(x,y))
    elif o == '-':
        print(jian(x,y))
    elif o == '*':
        print(cheng(x,y))
    elif o == '/':
        print(chu(x,y))
    else:
        pass
    
operator(2,'/',4)
 如果进行除法运算,先得判断是否加,减,乘之后再判断 除,实际上前三次判断是多余的。并不是直接根据我们给的符号进行运算,而是做了几次判断后才运算,如果符号不是加减乘除范围内,那么代码会做四次判断,结果才到pass
switch实现是类似于这样:我们事先把四个条件摆在这里,当你传回来的值符合哪个条件的时候直接执行就可以了

from __future__ import division
 
def jia(x,y):
    return(x + y)
#jia = lambda x,y : x + y 
def jian(x,y):
    return(x - y)
#jian = lambda x,y : x - y
 
def cheng(x,y):
    return(x * y)
# cheng = lambda x,y : x * y
 
def chu(x,y):
    return(x / y)
#chu = lambda x,y : x / y
 
#定义一个字典
operator = {'+' : jia, '-' : jian,'*' : cheng, '/' : chu}
#(operator['+'](3,2)) 等同于 jia(3,2)
#取字典里的值用get()
print(operator['/'](3,2))
这里省去了if的判断环节,只是把值告诉字典,然后去取值做运算。 也可以增加一个函数:

from __future__ import division
 
jia = lambda x,y : x + y 
jian = lambda x,y : x - y
cheng = lambda x,y : x * y
chu = lambda x,y : x / y
 
#定义一个字典
operator = {'+' : jia, '-' : jian,'*' : cheng, '/' : chu}
#(operator['+'](3,2)) 等同于 jia(3,2)
#print(operator['/'](3,2))
#取字典里的值用get()
def f(x,o,y):
    print(operator.get(o)(x,y))
    
f(3,'/',2)
 当然按照{1:case1,2:case2}.get(x,lambda *arg,**key:)() 这个形式,还可以改为:

from __future__ import division
 
jia = lambda x,y : x + y 
jian = lambda x,y : x - y
cheng = lambda x,y : x * y
chu = lambda x,y : x / y
 
def f(x,o,y):
    print({'+' : jia, '-' : jian,'*' : cheng, '/' : chu}.get(o)(x,y))
    
f(3,'/',2)
 当然当然,还可以简化为这样:

from __future__ import division
x = 3
y = 2
operator = '/'
result = {
          '+' : x + y,
          '-' : x - y,
          '*' : x * y,
          '/' : x / y
          }
print(result.get(operator))
 当然当然当然当然,还可以这样简化:

from __future__ import division
 
def f(x,o,y):
    print({'+' : x+y, '-' : x-y,'*' : x*y, '/' : x/y}.get(o))
    
f(3,'/',2)

拓展:switch实现的更多相关文章

  1. C#NPOI对Excel的操作、导入导出时异常处理、最全的NPOI资料在这里~

    一.Excel理论知识 最新版NPOI2.4.1链接:https://pan.baidu.com/s/1iTgJi2hGsRQHyw2S_4dIUw  提取码:adnq • 整个Excel表格叫做工作 ...

  2. 据说每个大牛、小牛都应该有自己的库——JavaScript原生对象拓展

    在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏,一是,关于写个自己的库的想法由来 ...

  3. 9.12/ css3拓展、js基础语法、程序基本知识、数据类型、运算符表达方式、语句知识点

    css3拓展: <display:none>  将某个元素隐藏       <visibility:hidden>  也是将某个元素隐藏 <display:block&g ...

  4. ListBox复选框拓展

    Toolkit的LongListMutiSelector的复选框功能,想必许多人都需要吧!然而系统本身控件ListBox虽然也有多选功能,可是外观上却缺乏复选框,选择效果只是颜色变化.于是在上一个项目 ...

  5. 学习Swift -- 拓展

    拓展(Extension) 扩展就是向一个已有的类.结构体.枚举类型或者协议类型添加新功能.这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模).扩展和 Objective-C 中的分类 ...

  6. android ListView和GridView拖拽移位具体实现及拓展

    关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:              首 ...

  7. 单片微机原理P3:80C51外部拓展系统

    外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC.   0. IO接口电路概念与存储器拓展 1. 为什 ...

  8. JavaScript原生对象拓展

    JavaScript原生对象拓展 在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏 ...

  9. 框架基础:ajax设计方案(六)--- 全局配置、请求格式拓展和优化、请求二进制类型、浏览器错误搜集以及npm打包发布

    距离上一次博客大概好多好多时间了,感觉再不搞点东西出来,感觉就废了的感觉.这段时间回老家学习驾照,修养,然后7月底来上海求职(面了4家,拿了3家office),然后入职同程旅游,项目赶进度等等一系列的 ...

随机推荐

  1. 动态修改 C 语言函数的实现

    Objective-C 作为基于 Runtime 的语言,它有非常强大的动态特性,可以在运行期间自省.进行方法调剂.为类增加属性.修改消息转发链路,在代码运行期间通过 Runtime 几乎可以修改 O ...

  2. Android反射机制实现与原理

    本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或 ...

  3. 由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储

    #include <stdio.h> #include <string.h> int main() { char s[]="Copywrite 1999-2000 G ...

  4. typedef的使用1——引入

    #include <stdio.h> #include <string.h> //#define _CRT_SRCURE_NO_WARNING #pragma warning( ...

  5. 《Mysql 公司职员学习篇》 第二章 小A的惊喜

          第二章 小A的惊喜  ---- 认识数据库 吃完饭后,小Y和小A回到了家里,并打开电脑开始学习Mysql. 小Y:"小A,你平时的Excell文件很多的情况下,怎么样存放Exce ...

  6. RecyclerView, ListView 只显示一行内容 问题解决

    Adapter 中的data有多行,但是RecyclerView只显示一行. 原因出在item的layout xml, 用了自动生成的RelativeLayout, 她的默认高度height属性是ma ...

  7. JS获取活动区域高和宽

    var width;            var height;            //获取窗口宽度            if (window.innerWidth)              ...

  8. JavaScript学习总结一(String对象的用法)

    javascript String对象的常用API 1:indexOf indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置.如果没有找到匹配的字符串则返回 -1.注意: inde ...

  9. 春&风

    流光飞舞中,消逝的背影连同流动的人群,早已荒凉. 谁是谁的谁?落入尘世间,只是光阴下面的一粒尘埃. 那些时光,那些爱,渐行渐远. 留在心底,淡淡的思念,如轻风一阵, 吹过 彼此的容颜.

  10. java面板

    import java.awt.Color; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JLab ...