其他语言中,switch语句大概是这样的
- switch (var)
- {
- case value1: do_some_stuff1();
- case value2: do_some_stuff2();
- ...
- case valueN: do_some_stuffN();
- default: do_default_stuff();
- }
-
-
而python本身没有switch语句,解决方法有以下3种:
A.使用dictionary
values = {
value1: do_some_stuff1,
value2: do_some_stuff2,
...
valueN: do_some_stuffN,
}
values.get(var, do_default_stuff)()
B.使用lambda
result = {
'a': lambda x: x * 5,
'b': lambda x: x + 7,
'c': lambda x: x - 2
}[value](x)
C.Brian Beck提供了一个类 switch 来实现其他语言中switch的功能
-
- class switch(object):
- def __init__(self, value):
- self.value = value
- self.fall = False
-
- def __iter__(self):
-
- yield self.match
- raise StopIteration
-
- def match(self, *args):
-
- if self.fall or not args:
- return True
- elif self.value in args:
- self.fall = True
- return True
- else:
- return False
-
- v = 'ten'
- for case in switch(v):
- if case('one'):
- print 1
- break
- if case('two'):
- print 2
- break
- if case('ten'):
- print 10
- break
- if case('eleven'):
- print 11
- break
- if case():
- print "something else!"
-
Python中是没用switch语句的,这应该是体现python大道至简的思想,python中一般多用字典来代替switch来实现。
-
- from __future__ import division
-
- def jia(x,y):
- print x+y
-
- def jian(x,y):
- print x-y
-
- def cheng(x,y):
- print x*y
-
- def chu(x,y):
- print x/y
-
- operator = {'+':jia,'-':jian,'*':cheng,'/':chu}
-
- def f(x,o,y):
- operator.get(o)(x,y)
-
- f(3,'+',2)
上面的代码就用字典实现了选择功能,要是在C++中实现上述功能,是用switch实现的,但是用python的字典实现起来更简单