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中使用next()方法操作文件的教程
May 24 Python
python 实时遍历日志文件
Apr 12 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
Linux下python3.6.1环境配置教程
Sep 26 Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 Python
在python中使用with打开多个文件的方法
Jan 07 Python
Django后台admin的使用详解
Jul 08 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 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检查日期函数checkdate用法实例
2015/03/19 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
JavaScript 函数式编程的原理
2009/10/16 Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
python创建关联数组(字典)的方法
2015/05/04 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
开源Web应用框架Django图文教程
2017/03/09 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python中音频处理库pydub的使用教程
2017/06/07 Python
Django REST framework视图的用法
2019/01/16 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
python实现邮件发送功能
2019/08/10 Python
Python上下文管理器全实例详解
2019/11/12 Python
python实现图片素描效果
2020/09/26 Python
Python通过字典映射函数实现switch
2020/11/06 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
超市仓管员岗位职责范本
2014/09/18 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
安全生产标语大全
2014/10/06 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS