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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
python使用socket创建tcp服务器和客户端
Apr 12 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
keras自定义损失函数并且模型加载的写法介绍
Jun 15 Python
Python扫描端口的实现
Jan 25 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 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
Zerg基本策略
2020/03/14 星际争霸
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
Js中sort()方法的用法
2006/11/04 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Django admin美化插件suit使用示例
2017/12/12 Python
python3调用R的示例代码
2018/02/23 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
会计助理岗位职责
2014/02/17 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
Python利用zhdate模块实现农历日期处理
2022/03/31 Python
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python