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 pickle 和 shelve模块的用法
Sep 16 Python
python小技巧之批量抓取美女图片
Jun 06 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
python递归下载文件夹下所有文件
Aug 31 Python
Python获取时间戳代码实例
Sep 24 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
Python3开发环境搭建详细教程
Jun 18 Python
python爬虫框架feapde的使用简介
Apr 20 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
2013/07/08 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
Python yield 使用方法浅析
2017/05/20 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python异常处理例题整理
2019/07/07 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
社保委托书怎么写
2014/08/02 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
铁路安全反思材料
2014/12/24 职场文书
MySQL的索引你了解吗
2022/03/13 MySQL
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android