python switch 多分支选择的实现 | 您所在的位置:网站首页 › python有switch语句吗 › python switch 多分支选择的实现 |
![]() 相信玩过几天 python 的小伙伴都知道,python 里并没有 switch 关键字实现,那这是为什么呢? 根据官方说法 PEP 3103 - A Switch/Case Statement. 实现 switch case 需要被判断的变量是可哈希和可比较的,这与 python 提倡的灵活性有冲突。在实现上优化不好做,可能到最后最差的情况汇编出来和 if else 组是一样的,所以 python 没有支持 但是没有 switch 关键字,不代表不能实现类似效果,接下来通过几个小程序来说明此类问题 if else 判断我们通过最常用的 if else 判断来实现一段代码 def matching_if(type): if type == 0: return '优惠1块钱' elif type == 1: return '优惠10块钱' elif type == 2: return '优惠100块钱' return '无优惠' if __name__ == '__main__': print(matching_if(1)) print(matching_if(999))执行结果如下: ''' 打印输出: 优惠10块钱 无优惠 ''' dict 字典可以使用字典实现 switch case,这种方式易维护,同时也能够减少代码量。如下是使用字典模拟的 switch case 实现: def matching_dict(type): types = { 0: '优惠1块钱', 1: '优惠10块钱', 2: '优惠100块钱' } return types.get(type, '无优惠') if __name__ == '__main__': print(matching_dict(1)) print(matching_dict(999))代码从整体上看着简洁了很多,那还有没有别的方式呢? 函数判断函数判断从代码数量来说并无优势,优势点在于其灵活性,如果根据不同的类型作出大量操作,函数运算无疑是最优的方式 def one(): return '优惠1块钱' def two(): return '优惠10块钱' def three(): return '优惠100块钱' def default(): return '无优惠' def matching_method(type): types = { 0: one, 1: two, 2: three } method = types.get(type, default) return method() if __name__ == '__main__': print(matching_method(1)) print(matching_method(999))优雅的代码是程序员的追求之一,作者本人也有一定程度的代码洁癖,所以涉及此类应用,会选择第二种 dict 字典类型应用 lambda 函数这里推出一款 lambda 配合 dict 字典的方式,可以对运算条件作出更为精准的计算 def matching_lambda(type): matching_dict = lambda x: { x == 0: '优惠1块钱', x == 1: '优惠10块钱', x == 2: '优惠100块钱' } return matching_dict(type)[True] if __name__ == '__main__': print(matching_lambda(1)) print(matching_lambda(2)) 结言由于作者水平有限, 欢迎大家能够反馈指正文章中错误不正确的地方, 感谢 🙏 小伙伴的喜欢就是对我最大的支持, 如果读了文章有所收获, 希望能够 点赞、评论、关注三连! 微信搜索【源码兴趣圈】,关注龙台,回复【资料】领取涵盖 GO、Netty、SpringCLoud Alibaba、Seata、开发规范、面试宝典、数据结构等电子书 or 视频学习资料! 推荐阅读: 【强烈推荐】1w 字,18 张图,彻底说清 springboot starter【强烈推荐】谨慎使用 JDK 8 新特性并行流 ParallelStream【强烈推荐】一文快速掌握 Redisson 如何实现分布式锁原理【大厂面试真题】JDK 线程池中如何不超最大线程数快速消费任务【大厂面试真题】JDK 线程池如何保证核心线程不被销毁作者麻花,坐标帝都 Java 后端研发,励志成为架构师的一枚处女座程序员,专注高并发、框架底层源码、分布式等知识分享 |
CopyRight 2018-2019 实验室设备网 版权所有 |