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每次处理固定个数的字符的方法总结
Jan 29 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
浅析Python四种数据类型
Sep 26 Python
python事件驱动event实现详解
Nov 21 Python
浅析python参数的知识点
Dec 10 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
python如何绘制疫情图
Sep 16 Python
Python爬虫中Selenium实现文件上传
Dec 04 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 Python
PyTorch device与cuda.device用法
Apr 03 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
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
限制复选框的最大可选数
2006/07/01 Javascript
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
validator验证控件使用代码
2010/11/23 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
js中的 || 与 && 运算符详解
2018/05/24 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
iview实现图片上传功能
2020/06/29 Javascript
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
美国滑板店:Tactics
2020/11/08 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
校园公益广告语
2014/03/13 职场文书
初中学生期末评语
2014/04/24 职场文书
护理专业自我评价
2015/03/11 职场文书
污染环境建议书
2015/09/14 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS
Javascript webpack动态import
2022/04/19 Javascript