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中去空格函数的用法
Aug 21 Python
Python的randrange()方法使用教程
May 15 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
Python星号*与**用法分析
Feb 02 Python
pycharm 配置远程解释器的方法
Oct 28 Python
python2.7实现邮件发送功能
Dec 12 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
Python 字典一个键对应多个值的方法
Sep 29 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
python基于opencv批量生成验证码的示例
Apr 28 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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缓冲区为你的站点加速
2015/10/10 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
详解vue-router传参的两种方式
2018/09/10 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
社区包粽子活动方案
2014/01/21 职场文书
驾驶员岗位职责
2014/01/29 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
安全先进个人材料
2014/12/29 职场文书
事业单位个人总结
2015/02/12 职场文书
世界遗产的导游词
2015/02/13 职场文书
交心谈心活动总结
2015/05/11 职场文书
交通事故被告答辩状
2015/05/22 职场文书
七夕情人节问候语
2015/11/11 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
解决vue中provide inject的响应式监听
2022/04/19 Vue.js