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 22 Python
Python中endswith()函数的基本使用
Apr 07 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
简单实现python爬虫功能
Dec 31 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
python远程连接MySQL数据库
Apr 19 Python
Python paramiko模块使用解析(实现ssh)
Aug 30 Python
python颜色随机生成器的实例代码
Jan 10 Python
Python Json数据文件操作原理解析
May 09 Python
python爬虫selenium模块详解
Mar 30 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 Python
Python Matplotlib绘制动画的代码详解
May 30 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 万年历实现代码
2012/10/18 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
Python中的rjust()方法使用详解
2015/05/19 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
TensorFlow的权值更新方法
2018/06/14 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
pycharm快捷键汇总
2020/02/14 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
素食餐饮项目创业计划书
2014/02/02 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
维修工先进事迹
2014/05/29 职场文书
小区推广策划方案
2014/06/06 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
请假条应该怎么写?
2019/06/24 职场文书
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS