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'​​​​: ​​​​lambda​​​​x: x ​​​​*​​​​5​​​​,​​
​​ ​​​​'b'​​​​: ​​​​lambda​​​​x: x ​​​​+​​​​7​​​​,​​
​​ ​​​​'c'​​​​: ​​​​lambda​​​​x: x ​​​​-​​​​2​​
​​}[value](x)​​


如果是稍微复杂一点的函数,也可以做到,比如我们计算加减乘除,函数定义如下:

​​def​​​​add(a,b):​​
​​ ​​​​return​​​​a ​​​​+​​​​b​​
​​def​​​​multi(a,b):​​
​​ ​​​​return​​​​a​​​​*​​​​b​​
​​def​​​​sub(a,b):​​
​​ ​​​​return​​​​a ​​​​-​​​​b​​
​​def​​​​div(a,b):​​
​​ ​​​​return​​​​a​​​​/​​​​b​​​​#b is non-zero​​


如果是switch实现的话,case(‘操作数’)来判断之行的对应函数。看看Python的实现:

​​def​​​​calc(​​​​type​​​​,x,y):​​
​​ ​​​​calculation ​​​​=​​​​{​​​​'+'​​​​:​​​​lambda​​​​:add(x,y),​​
​​ ​​​​'*'​​​​:​​​​lambda​​​​:multi(x,y),​​
​​ ​​​​'-'​​​​:​​​​lambda​​​​:sub(x,y),​​
​​ ​​​​'/'​​​​:​​​​lambda​​​​:div(x,y)}​​
​​ ​​​​return​​​​calculation[​​​​type​​​​]()​​
​​#calc = {1:lambda:add(x,y)}[value]()​​




​​result1 ​​​​=​​​​calc(​​​​'+'​​​​,​​​​3​​​​,​​​​6​​​​)​​
​​result2 ​​​​=​​​​calc(​​​​'-'​​​​,​​​​3​​​​,​​​​6​​​​)​​
​​print​​​​result1, result2​​


这里用的结构如下:

​​message​​​​=​​​​{​​​​'type​​​​1​​​​'​​​​:​​​​lambda​​​​:​​​​func​​​​1​​​​(​​​​some_data​​​​)​​​​,​​
​​ ​​​​'type​​​​2​​​​'​​​​:​​​​lambda​​​​:​​​​func​​​​2​​​​(​​​​other_data​​​​)​​​​,​​
​​ ​​​​}​​
​​return​​​​message​​​​[type]​​​​(​​​​)​​


还有更加复杂的就是自定义一个Switch类了,可以参考​​http://code.activestate.com/recipes/410692-readable-switch-construction-without-lambdas-or-di/​

觉得用python写个服务器什么的,其实还是很简单的。