Python中switch-case实现(转)
原创
©著作权归作者所有:来自51CTO博客作者woodcol的原创作品,请联系作者获取转载授权,否则将追究法律责任
Python不像C/C++,Java等有switch-case的语法。不过其这个功能,比如用Dictionary以及lambda匿名函数特性来替代实现。
比如PHP中的如下代码:
switch($value) {
case'a':
$result= $x* 5;
break;
case'b':
$result= $x+ 7;
break;
case'c':
$result= $x- 2;
break;
}
Python的等价实现为:
result ={
'a': lambdax: x *5,
'b': lambdax: x +7,
'c': lambdax: x -2
}[value](x)
如果是稍微复杂一点的函数,也可以做到,比如我们计算加减乘除,函数定义如下:
defadd(a,b):
returna +b
defmulti(a,b):
returna*b
defsub(a,b):
returna -b
defdiv(a,b):
returna/b#b is non-zero
如果是switch实现的话,case(‘操作数’)来判断之行的对应函数。看看Python的实现:
defcalc(type,x,y):
calculation ={'+':lambda:add(x,y),
'*':lambda:multi(x,y),
'-':lambda:sub(x,y),
'/':lambda:div(x,y)}
returncalculation[type]()
#calc = {1:lambda:add(x,y)}[value]()
result1 =calc('+',3,6)
result2 =calc('-',3,6)
printresult1, result2
这里用的结构如下:
message={'type1':lambda:func1(some_data),
'type2':lambda:func2(other_data),
}
returnmessage[type]()
还有更加复杂的就是自定义一个Switch类了,可以参考http://code.activestate.com/recipes/410692-readable-switch-construction-without-lambdas-or-di/
觉得用python写个服务器什么的,其实还是很简单的。