• 拓展:switch实现


    拓展: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)
  • 相关阅读:
    实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
    期刊搜索问题——SCI、EI、IEEE和中文期刊
    面向对象分析与设计(C++)课堂笔记
    windows与VMware ubuntu虚拟机实现文件共享
    GDI+在绘制验证码中的使用
    【转】.net中快捷键的使用
    MD5加密“破解”在.NET平台实现最基本的理解
    UE4 Persona 骨架网格物体动画
    从零开始做3D地图编辑器 基于QT与OGRE
    TBB(Intel Threading Building Blocks)学习笔记
  • 原文地址:https://www.cnblogs.com/fishdm/p/3574078.html
Copyright © 2020-2023  润新知