美文网首页js css html
Python switch case 全兼容写法

Python switch case 全兼容写法

作者: AlienPaul | 来源:发表于2023-04-02 10:59 被阅读0次

    背景

    Python 2.x和3.x早期版本一直没有提供switch case的语法支持。为了实现类似的逻辑,我们不得不使用一连串的ifelif判断分支,代码十分的冗长可读性不高。

    Python 3.10终于为我们带来了switch case 语法的支持。但问题来了,我们在愉快享受新版本switch case的便利之时,老版本的兼容性就被丢掉了。现阶段我们不得不考虑如何写出同时兼容Python2和Python3的代码。

    下面为大家带来一种较为简洁易读,并且又兼容Python2和Python3的switch case功能代码的写法。

    示例写法

    为了方便说明,本人将swtich case逻辑封装在了switch_method方法。代码和示例如下所示。

    def switch_method(i):
        return {
            i <= 4: 0,
            4 < i <= 8: 1,
            8 < i <= 16: 2,
            i > 16: 3
        }[1]
    
    
    if __name__ == '__main__':
    
        print(switch_method(2))
        print(switch_method(5))
        print(switch_method(12))
        print(switch_method(20))
    
    

    运行结果:

    0
    1
    2
    3
    

    分析:

    这里使用Python的dict来表示条件和结果值之前的关系。dictkey返回的是布尔类型。在传入参数后,实际上这个dict的值为{True:'value1', False:'value2'}。为什么说这里的True和False只出现一次呢?因为dict的key是不能重复的。如果key相同,原来这个key对应的value会被替换。

    dict的作用搞明白了,那么最后的[1]意思是什么呢?[1]相当于[True]。由于这个字典的key是布尔类型,1会被隐式转换为True。意思也就是获取True这个key对应的值。

    综上,switch_method方法的执行效果为,逐个匹配dictkey的条件表达式,找到匹配的条件,获取它对应的值。

    注意事项:dict中的条件不要相互重叠,意思就是一个值匹配多个条件。因为在Python 3.6之前字典是无序的,我们没法保证条件匹配的顺序。对于同一个值,匹配的结果很可能不同,极易造成很隐蔽的bug,务必引起注意。

    相关文章

      网友评论

        本文标题:Python switch case 全兼容写法

        本文链接:https://www.haomeiwen.com/subject/fsfrddtx.html