拓展: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 )

你可能感兴趣的:(switch)