拓展: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. 从问题看本质: 研究TCP close_wait的内幕

    Socket应用服务器TomcatOSUbuntu  /* * @author: ahuaxuan * @date: 2010-4-30 */ 最近遇到的一个关于socket.close的问题,在某个 ...

  2. c语言实例

    #include <stdio.h> int main() { ; ; i=max(j,k); printf("i=%d\n",i); ; } int max(int ...

  3. 将字符串写进txt中方式

    try { File file = new File(filePath); PrintStream ps = new PrintStream(new FileOutputStream(file)); ...

  4. VB.NET中使用代表对方法异步调用

    按照我们常规的思维方式,计算机应该是干完一件事,然后再干下一件.用术语来说,这种执行任务的方式叫做同步执行(Synchronous Execution).既然这样,那么为什么要引入异步执行的概念呢? ...

  5. Linux系统常见的压缩命令

    *.Z compress 程序压缩的文件: //在当前的Linux主流版本中都已经默认没有支持该压缩命令了,因为gzip命令已经取代了compress命令了 *.gz gzip 程序压缩的文件: *. ...

  6. logstash-input-file 参数说明

    参数 close_older close_older: # This has different implications depending on if a file is being tailed ...

  7. MATLAB基础入门笔记

    为了参加那个电工杯,豁出去啦,时间真的很短,但是得挑战呀..对于MATLAB编程,有一些了解,MATLAB(矩阵实验室的简称)是一种专业的计算机程序,用于工程科学的矩阵数学运算,说说它的开发环境. 任 ...

  8. 目前电脑的硬件尺寸参数,计划弄个小一些的ATX机箱

    显卡:讯景R9 370x 尺寸:234×115×39mm 主板:技嘉GA-970A-DS3P 尺寸: 30.5X21.5 cm

  9. Win8.1中打不开IE的解决方法

    IE11 打不开了,重新安装了IE也解决不了问题,咋整,找了好久终于找到原因,原来是权限的问题,特此和大家共享 解决办法: WIN+R,regedit,找到HKEY_CURRENT_USER\Soft ...

  10. ASP实现https和http之间转化

    HTTPS 是一个安全通信信道,用于在客户计算机和服务器之间交换信息.它使用安全套接字层 (SSL). HTTPS (Secure Hypertext Transfer Protocol) 安全超文本 ...