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 k-近邻算法实例分享
Jun 11 Python
Python实现从百度API获取天气的方法
Mar 11 Python
详解Python中使用base64模块来处理base64编码的方法
Jul 01 Python
Python优先队列实现方法示例
Sep 21 Python
python如何实现反向迭代
Mar 20 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
pytorch打印网络结构的实例
Aug 19 Python
python 实现字符串下标的输出功能
Feb 13 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
用python进行视频剪辑
Nov 02 Python
python中pickle模块浅析
Dec 29 Python
Python OpenCV 彩色与灰度图像的转换实现
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中生成标准uuid(guid)的方法
2019/04/28 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
python简单读取大文件的方法
2016/07/01 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
pandas的qcut()方法详解
2019/07/06 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
python如何查看网页代码
2020/06/07 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
大学毕业生自我鉴定
2013/11/05 职场文书
趣味体育活动方案
2014/02/08 职场文书
结婚典礼致辞
2015/07/28 职场文书
担保书范文
2019/07/09 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS