python switch 实现多分支选择功能


Posted in Python onDecember 21, 2020

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))

结言

由于作者水平有限, 欢迎大家能够反馈指正文章中错误不正确的地方, 感谢 ?

到此这篇关于python switch 实现多分支选择功能的文章就介绍到这了,更多相关python switch 多分支实现内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
Python open()文件处理使用介绍
Nov 30 Python
python中enumerate函数遍历元素用法分析
Mar 11 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
flask框架视图函数用法示例
Jul 19 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
Python如何在bool函数中取值
Sep 21 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
selenium自动化测试入门实战
Dec 21 #Python
django中ImageField的使用详解
Dec 21 #Python
python文件路径操作方法总结
Dec 21 #Python
Python爬虫新手入门之初学lxml库
Dec 20 #Python
Python修改DBF文件指定列
Dec 19 #Python
Python实现FTP文件定时自动下载的步骤
Dec 19 #Python
Python+Xlwings 删除Excel的行和列
Dec 19 #Python
You might like
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
聊一聊JS中的prototype
2016/09/29 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
js常见遍历操作小结
2019/06/06 Javascript
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python类的继承和多态代码详解
2017/12/27 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
python操作excel让工作自动化
2019/08/09 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
地理教师岗位职责
2014/03/16 职场文书
六五普法规划实施方案
2014/03/21 职场文书
法语专业求职信
2014/07/20 职场文书
环保建议书作文500字
2015/09/14 职场文书
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS