Python没有switch语句的解决方法
Jan 20, 2008其他语言中,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)()
具体请参考: Python switch statement
这个方法的缺点是:我不知道do_some_stuff是不是允许多个语句,如何实现,
也许是可以的,我不知道-.-
B.使用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)
具体参考: Switch statements in Python
C.Brian Beck提供了一个类 switch 来实现其他语言中switch的功能
# This class provides the functionality we want. You only need to look at # this if you want to know how this works. It only needs to be defined # once, no need to muck around with its internals.
class switch(object): def __init__(self, value): self.value = value self.fall = False def __iter__(self): """Return the match method once, then stop""" yield self.match raise StopIteration def match(self, *args): """Indicate whether or not to enter a case suite""" if self.fall or not args: return True elif self.value in args: # changed for v1.5, see below self.fall = True return True else: return False # The following example is pretty much the exact use-case of a dictionary, # but is included for its simplicity. Note that you can include statements # in each suite. 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(): # default, could also just omit condition or 'if True' print "something else!" # No need to break here, it'll stop anyway