当前位置 博文首页 > Python实现switch/case语句

    Python实现switch/case语句

    作者:liulijun-dev 时间:2021-09-18 18:36

    目录
    • 使用if…elif…elif…else 实现switch/case
    • 使用字典 实现switch/case
    • 在类中可使用调度方法实现switch/case
    • 总结

    使用if…elif…elif…else 实现switch/case

    可以使用if…elif…elif..else序列来代替switch/case语句,这是大家最容易想到的办法。但是随着分支的增多和修改的频繁,这种代替方式并不很好调试和维护。

    使用字典 实现switch/case

    可以使用字典实现switch/case这种方式易维护,同时也能够减少代码量。如下是使用字典模拟的switch/case实现:

    def num_to_string(num):
        numbers = {
            0 : "zero",
            1 : "one",
            2 : "two",
            3 : "three"
        }
        return numbers.get(num, None)
    if __name__ == "__main__":
        print num_to_string(2)
        print num_to_string(5)
    

    执行结果如下:

    two
    None

    Python字典中还可以包括函数或Lambda表达式,代码如下:

    def success(msg):
        print msg
    def debug(msg):
        print msg
    def error(msg):
        print msg
    def warning(msg):
        print msg
    def other(msg):
        print msg
    def notify_result(num, msg):
        numbers = {
            0 : success,
            1 : debug,
            2 : warning,
            3 : error
        }
        method = numbers.get(num, other)
        if method:
            method(msg)
    if __name__ == "__main__":
        notify_result(0, "success")
        notify_result(1, "debug")
        notify_result(2, "warning")
        notify_result(3, "error")
        notify_result(4, "other")
    

    执行结果如下:

    success
    debug warning error
    other

    通过如上示例可以证明能够通过Python字典来完全实现switch/case语句,而且足够灵活。尤其在运行时可以很方便的在字典中添加或删除一个switch/case选项。

    在类中可使用调度方法实现switch/case

    如果在一个类中,不确定要使用哪种方法,可以用一个调度方法在运行的时候来确定。代码如下:

    class switch_case(object):
        def case_to_function(self, case):
            fun_name = "case_fun_" + str(case)
            method = getattr(self, fun_name, self.case_fun_other)
            return method
        def case_fun_1(self, msg):
            print msg
        def case_fun_2(self, msg):
            print msg
        def case_fun_other(self, msg):
            print msg
    if __name__ == "__main__":
        cls = switch_case()
        cls.case_to_function(1)("case_fun_1")
        cls.case_to_function(2)("case_fun_2")
        cls.case_to_function(3)("case_fun_other")
    

    执行结果如下:

    case_fun_1
    case_fun_2
    case_fun_other

    总结

    就个人来说,使用字典来实现switch/case是最为灵活的,但是理解上也有一定的难度。

    本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注站长博客的更多内容!

    jsjbwy
    下一篇:没有了