python之switch的实现


  switch是一种语法结构,在大多数的编程语言当中,都提供了switch语法结构。

  switch语句的作用与优点:

   switch语句用于编写多分支结构的程序,类似于if... elif... else(if多分支)语句

    switch语句表达的分支结构比if多分支语句表达的更清晰

    代码的可读性更高,执行效率也比if多分支语句要高

  python并没有提供switch语句,但是我们可以通过字典实现switch语句的功能。

    实现方法分为两步:

      1、定义一个字典

      2、调用字典的get()获取相应的表达式

  通过字典调用函数实现switch功能的方式如下:

1
{ 1 :case1, 2 :case2}.get(x, lambda  * args, * * keys: [args,keys])()

  下面我们通过编写一个简单的四则运算程序来看看switch在python中到底是如何实现的,以及有何优点。

  通过if多分支来写传统的四则运算程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@localhost test] # cat cal.py 
#!/usr/bin/python
#coding:utf-8
 
from  __future__  import  division     #当除法结果有小数时保留小数
 
def  plus(x,y):
     return  +  y
 
def  minus(x,y):
     return  -  y
 
def  times(x,y):
     return  *  y
 
def  divide(x,y):
     return  /  y
 
def  operator(x,o,y):
     if  = =  "+" :
         print  plus(x,y)
     elif  = =  "-" :
         print  minus(x,y)
     elif  = =  "*" :
         print  times(x,y)
     elif  = =  '/' :
         print  divide(x,y)
     else :
         pass
 
operator( 2 , '+' , 4 )
[root@localhost test] # python cal.py 
6

  如上例所示,当我们要执行除法时,首先会先判断“+”、“-”、“*”三条语句,这样就会显得有点多余,降低了程序执行的效率。

  接下来我们通过switch语句来写一下这个简单的四则运算程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@localhost test] # cat scal.py 
#!/usr/bin/python
#coding:utf-8
 
from  __future__  import  division
 
plus  =  lambda  x,y: x + y
minus  =  lambda  x,y: x - y
times  =  lambda  x,y: x * y
divide  =  lambda  x,y: x / y
 
operator  =  { '+' :plus, '-' :minus, '*' :times, '/' :divide}
 
def  f(x,o,y):
     return  operator.get(o, lambda  * args, * * keys: [o,arg,key])(x,y)
 
print  f( 1 , '+' , 2 )
print  f( 4 , '-' , 2 )
print  f( 4 , '*' , 2 )
print  f( 3 , '/' , 2 )
print  f( 1 , '%' , 2 )
[root@localhost test] # python scal.py 
3
2
8
1.5
[ '%' , ( 1 2 ), {}]     #这里是由上面的lambda语句收集操作数、运算符和字典而得来的
                      #当运算符不是+-*/中任意一个时,则用o收集运算符存至列表中,不执行运算操作
                      #用*args收集操作数
                      #用**keys收集字典,这个示例中没有字典,所以收集到的结果是一个空字典

  如上例如示,我们将直接在字典中取到key(也就是运算符),然后进行运算,如此的话就少了传统if多分支语句的判断过程,从而大大提高程序执行效率。









本文转自 忘情OK  51CTO博客,原文链接:http://blog.51cto.com/itchentao/1890687,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值