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多进程机制实例详解
Jul 02 Python
Python抓取百度查询结果的方法
Jul 08 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
python文件名和文件路径操作实例
Sep 29 Python
python监控进程脚本
Apr 12 Python
python使用turtle库绘制时钟
Mar 25 Python
详解Python中的正则表达式
Jul 08 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
python3实现弹弹球小游戏
Nov 25 Python
使用Python进行防病毒免杀解析
Dec 13 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 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的错误信息
2006/10/09 PHP
如何过滤高亮显示非法字符
2006/10/09 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
浅说js变量
2011/05/25 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
python最长回文串算法
2018/06/04 Python
python中map的基本用法示例
2018/09/10 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
Python eval函数原理及用法解析
2020/11/14 Python
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
生产管理的三大手法
2013/11/11 职场文书
优秀毕业生求职信范文
2014/01/02 职场文书
幼儿园教师辞职信
2014/01/18 职场文书
小学生读书感言
2014/02/12 职场文书
党校学习自我鉴定
2014/02/24 职场文书
求职信模板
2014/05/23 职场文书
2015年女生节活动总结
2015/02/27 职场文书
迎新生晚会主持词
2015/06/30 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle