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 zip文件 压缩
Dec 24 Python
python解析json实例方法
Nov 19 Python
Python KMeans聚类问题分析
Feb 23 Python
Python基于mysql实现学生管理系统
Feb 21 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
基于python实现坦克大战游戏
Oct 27 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
如何一键升级Python所有包
Nov 05 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 Python
python 提取html文本的方法
May 20 Python
Python访问Redis的详细操作
Jun 26 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
探讨方法的重写(覆载)详解
2013/06/08 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
大学生大二自我鉴定
2013/10/28 职场文书
人力资源专业推荐信
2013/11/29 职场文书
简短证婚人证婚词
2014/01/09 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS