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 相关文章推荐
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
Jan 22 Python
python在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
Python中的面向对象编程详解(上)
Apr 13 Python
python友情链接检查方法
Jul 08 Python
详解python调度框架APScheduler使用
Mar 28 Python
Python实现Linux中的du命令
Jun 12 Python
python机器学习理论与实战(六)支持向量机
Jan 19 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
PyCharm代码格式调整方法
May 23 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
Python深度学习之实现卷积神经网络
Jun 05 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+DBM的同学录程序(5)
2006/10/09 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
python 获取等间隔的数组实例
2019/07/04 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
留学生如何写好自荐信
2013/12/27 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
志愿者活动总结范文
2014/04/26 职场文书
分公司经理任命书
2014/06/05 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL