拓展: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)
posted @ 2014-02-28 17:51  小丑戌  阅读(437)  评论(0编辑  收藏  举报