• [Python] 实现Switch Case


    Python没有switch语句,只能通过模拟来对应实现:

    **方法一:使用dictionary
    **values = {
    value1: do_some_stuff1,
    value2: do_some_stuff2,
    ...
    valueN: do_some_stuffN,
    }
    values.get(var, do_default_stuff)()

    根据需求可以自行更改参数内容,灵活运用

    def add(x,y):  
        print x+y  
    def minus(x,y):  
        print x-y  
    def multiply(x,y):  
        print x*y  
    def div(x,y):  
        print x/y  
    def fun_case_list(key,arg1,arg2):
        operator = {
        '+':add,
        '-':minus,
        '*':multiply,
        '/':div
        }
        if operator.has_key(key):
            return operator.get(key)(arg1,arg2)
        else:
            return 'No [%s] case in dic'%key #or do other func
    
    if __name__ == "__main__":
        fun_case_list('*',3,5)
        fun_case_list('l',3,4)
    

    或者你可以自己造一个类来实现:

    class switch_case(object):
        def case_to_function(self,case,arg1,arg2):
            func_name = 'case_func_'+str(case)
            try:
                method = getattr(self,func_name)
                return method(arg1,arg2)
            except AttributeError:
                return 'No func found in case list,do default action here'
        def case_func_add(self,arg1,arg2):
            temp = arg1 + arg2
            return temp
        def case_func_minus(self,arg1,arg2):
            temp = arg1 - arg2
            return temp
        def case_func_multiply(self,arg1,arg2):
            temp = arg1 * arg2
            return temp
        def case_func_div(self,arg1,arg2):
            temp = arg1 / arg2
            return temp
    func = 'minus'
    case = switch_case()
    print case.case_to_function(func,2,5)
    
    
    #或者是构造属性去送参数,看个人喜好
    class switch_case(object):
        def __init__(self, case, arg1, arg2):
            self.case = str(case)
            self.arg1 = arg1
            self.arg2 = arg2
        def case_to_function(self):
            func_name = 'case_func_'+str(self.case)
            try:
                method = getattr(self,func_name)
                return method()
            except AttributeError:
                return 'No func found in case list,do default action here'
            
        def case_func_add(self):
            temp = self.arg1 + self.arg2
            return temp
        def case_func_minus(self):
            temp = self.arg1 - self.arg2
            return temp
        def case_func_multiply(self):
            temp = self.arg1 * self.arg2
            return temp
        def case_func_div(self):
            temp = self.arg1 / self.arg2
            return temp
    
    func = 'minxus'
    case = switch_case(func,2,5)
    print case.case_to_function()
    
    

    方法二:使用lambda

    result = {
    'a': lambda x: x * 5,
    'b': lambda x: x + 7,
    'c': lambda x: x - 2
    }[value](x)

    方法三:Brian Beck提供了一个类 switch 来实现switch的功能

    
    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
    
    v = 'two'
    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
    
    
  • 相关阅读:
    C++ 类的多态一(virtual关键字--构造函数深刻理解)
    C++ 类的继承六(多继承的二义性--虚基类)
    C++ 类的继承五(类继承中的static关键字)
    C++ 类的继承四(类继承中的重名成员)
    C++ 类的继承三(继承中的构造与析构)
    C++ 类的继承二(赋值兼容性原则)
    C++ 类的继承一(访问控制)
    C++ 匿名对象产生场景
    WPF/ASP.NET:几个Prism中的术语
    Prism 5 + MEF中的ModuleCatalog.CreateFromXaml问题
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/12978475.html
Copyright © 2020-2023  润新知