拓展: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++ stringstream介绍,使用方法与例子

    From: http://www.usidcbbs.com/read-htm-tid-1898.html C++引入了ostringstream.istringstream.stringstream这 ...

  2. 学习笔记之APACHE ANT

    http://baike.baidu.com/link?url=KkOWkH_nMVJRbd4oj-aIHMVL4HR-s7fqm3i2brUcZzBinwUXjZgzPcYIWz5qFNNvjait ...

  3. Jordan Lecture Note-8: The Sequential Minimal Optimization Algorithm (SMO).

    The Sequential Minimal Optimization Algorithm (SMO) 本文主要介绍用于解决SVM对偶模型的算法,它于1998年由John Platt在论文“Seque ...

  4. java_Cookie添加和删除

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...

  5. RPC之Thrift学习实战

    关于Thrift的学习实战请参考:http://blog.csdn.net/column/details/slimina-thrift.html

  6. Bootstrap--组件之Glyphicons字体图标

    Glyphicons 字体图标 所有可用的图标 包括250多个来自 Glyphicon Halflings 的字体图标.Glyphicons Halflings 一般是收费的,但是他们的作者允许 Bo ...

  7. php 统计在线人数,今日访问量,总访问量

    直接复制到本站点下测试即可 代码如下: <?php header('Content-type: text/html; charset=utf-8');$online_log = "co ...

  8. SharePoint 学习记事(二)

    买了一本<sharepoint2010开发高级编程> 据说评价也不高. 搜到如下文章,留着看看:http://book.douban.com/review/5673741/ http:// ...

  9. Java_Vector类的使用,以及Stack继承Vector,推出的栈的特性

    测试用例: import java.util.Stack; /* * 简单的栈类测试: * Stack继承自Vector向量类: * 所以Stack的使用和Vector的使用类型的 * 而且是线程安全 ...

  10. <Error>: CGContextRestoreGState

    <Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please ...