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编写一个模仿CPU工作的程序
Apr 16 Python
Python编程中的for循环语句学习教程
Oct 14 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
Django model反向关联名称的方法
Dec 15 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
python正则表达式实例代码
Mar 03 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 Python
详解如何使用Pytest进行自动化测试
Jan 14 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
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
python如何生成网页验证码
2018/07/28 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
什么是makefile? 如何编写makefile?
2013/01/02 面试题
法律专业实习鉴定
2013/12/22 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
超越自我演讲稿
2014/05/21 职场文书
计算机系本科生求职信
2014/05/31 职场文书
教师个人师德总结
2015/02/06 职场文书