python通过字典来替代if..else

news2025/2/4 5:54:22

在应对多策略的场景下,大量使用if...else...不仅提高了后期的维护成本,还降低了运行效率。通过字典做映射就可以更好的优化代码。

比如这样一个模拟场景,根据用户的VIP等级,发放奖励。在大量使用if...else...时就会变成如下状态:

rank="VIP4"
if rank=="VIP1":
    print(100)
else:
    if rank=="VIP2":
        print(150)
    else:
        if rank=="VIP3":
            print(200)
        else:
            if rank=="VIP4":
                print(300)

在改用为字典后,代码如下:

rank="VIP4"
message={
    "VIP1":100,
    "VIP2":150,
    "VIP3":200,
    "VIP4":300,
    } 
a=message.get(rank,None)
print(a)
try:
    a=message[rank]
except:
    a=None
print(a)

打印结果:

这里,字典message拥有键(key)和值。可通过get(key,default=None),setdefault(key, default=None),以及message[key]来索引到值。

这三者的不同:

message.get(key,default=None):如果key不在字典中,则返回None

message.setdefault(key,default=None):如果key不在字典中,则返回None,并在字典中添加该key,其值为default的值。以本案例为例,若执行message.setdefault("VIP5",500),字典message后就会增加一项"VIP5":500,并返回值500。

message[key]:如果key不在字典中,就会直接报错。因此案例中采用了try..except..的格式。

我们在实际应用中不仅仅只是key对值的简单映射,而是更多会遇到需要映射函数的情况。这样的场景比如根据不同生产指令,去执行不同运动等。回到本案例,代码如下:

def vip1():
    return 100

def vip2():
    return 150

rank="VIP1"
message={
    "VIP1":vip1,
    "VIP2":vip2,
    "VIP3":200,
    "VIP4":300,
    } 
a=message.get(rank,None)
print(a)
try:
    a=message[rank]()
except:
    a=None
print(a)

执行后结果如下:

我们可以看到第一个a返回的值不是100,这是因为第一个返回的是一个函数整体,即一个函数类,而不是return的值。而如果执行a=message[rank],同样也是返回一个函数整体,而不会是return的值。只有在执行了a=message[rank]()后才会返回return的值。这里括号的作用就是执行函数的意思,同时括号里面还可以添加自定义函数需要的初始变量,最后这里a=message["VIP1"]()等价于a=vip1(),还等价于

b=message[rank]
a=b()

如果当字典中key映射的值不为函数,而为具体一个值时,此时执行a=message[rank]()就会报错。故优化后的框架如下:

def vip1():
    return 100

def vip2():
    return 150

rank="VIP1"
message={
    "VIP1":vip1,
    "VIP2":vip2,
    "VIP3":200,
    "VIP4":300,
    } 

try:a=message[rank]()
except:a=message.get(rank,None)
print(a)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nodejs篇 内置模块http 常用api

文章目录前提创建一个最基本的http服务器req有哪些值得关注的信息res常用的apihttp.request(options[, callback])server事件监听checkContinuecheckExpectationcloseconnect前提 如果你觉得nodejs官方文档给的api太多,不知道哪些重要,请看下去&#xf…

TensorRT全方位概览笔记

TensorRT (基于8.2.3)1.简介1.export1.1 使用tensorrt API 搭建1.2 使用parser1.3 使用框架内 tensorrt 接口1.4 注意事项2.开发辅助工具2.1 trtexec2.2 Netron2.3 onnx-graphsurgeon2.4 polygraphy2.5 Nsight Systems3. plugin3.1 plugin3.2 使用3.3 类…

就离谱!使用机器学习预测2022世界杯:小组赛挺准,但冠亚季军都错了 ⛵

💡 作者:韩信子ShowMeAI 📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40 📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41 📘 本文地址:https://www.sho…

C2. Potions (Hard Version)(可以后悔的选取 + 一种新奇的优先队列用法)

Problem - 1526C2 - Codeforces 这是该问题的困难版本。唯一不同的是,在这个版本中,n≤200000。只有当两个版本的问题都解决了,你才能进行黑客攻击。 有n个药水排成一行,最左边是药水1,最右边是药水n。每种药水在喝下…

Eclipse安装和环境的基本配置

Eclipse安装 安装包 链接:https://pan.baidu.com/s/13LXiyGmgdAQ2MYXhim1WMg 提取码:WADS 不会安装的可以参考这篇文章 链接: 安装教程文章 eclipse怎么更改存储位置 1.1 file-> Switch Workspace ->Other 打开后可以看到保存文件的路径也可以…

疫情之下连锁餐饮行业积极求变,集团采购协同管理系统重构企业采购数字化

2019年底至今,新冠肺炎疫情已进入了第三个年头。作为接触性、聚集性行业,国内餐饮业持续承压,经历了一系列的波折。尤其2022年以来,国内多地出现了此起彼伏的疫情,给餐企带来了较大冲击,餐饮行业整体营收收…

【推荐】安全访问服务边缘(SASE)资料汇总合集24篇

Secure Access Service Edge (SASE) 是Gartner推出的一个新的技术理念。SASE将 SD-WAN和网络安全解决方案(FWaaS、CASB、SWG 和ZTNA)融合到统一的云原生服务中。SASE是Gartner最新提出的一个技术理念,SASE用于从分布式云服务交付聚合的企业网…

Web前端105天-day49-jQuery

jQuery02 目录 前言 一、复习 二、标签内容 三、get请求 四、新增子元素 五、委托 六、克隆 七、加载HTML 八、准备就绪 九、Node.js 十、js中提示jQuery的方案 十一、location 十二、根据地址栏参数加载页面 十三、全局样式变量 总结 前言 jQuery02学习开始 一…

vi\vim编辑器的使用及命令、快捷键

vi\vim编辑器 1、vi\vim编辑器介绍 vi\vim是visual interface的简称,是Linux中最经典的文本编辑器。 同图形化界面中的文本编辑器一样,vi是命令行下对文本文件进行编辑的绝佳选择。 vim是vi的加强版本,兼容vi的所有指令,不仅能…

信息化时代,相比于人工服务客户更喜欢自助式服务

对于SaaS产品,为客户提供自助式服务,帮助客户能够自行完成任务和解决问题,给到客户更好的使用体验,对于SaaS产品,搭建一个自助式知识库门户和产品知识库尤为重要。在选购产品后,如果没有获得很好的客户服务…

TraceView使用

TraceView 是什么? TraceView 是 Android SDK 中内置的一个工具,用于加载 trace 文件,用图形的形式展示代码的执行时间、调用次数及调用栈,便于我们分析。 如何生成 trace 文件? 使用代码生成 Debug.startMethodTra…

新零售时代下,物流行业迎来新机遇

电商,一个异军突起的新行业,将改变传统商业旧模式。根据相关数据显示,2010-2019年,我国电商交易规模从4.5万亿元增长到34.8万亿元,年均复合增速达25%。在电商飞速发展的态势下,物流行业也迎来了蓬勃发展。 …

【华为OD机试真题2023 JAVA】去除多余空格

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 去除多余空格 知识点字符串数组队列 时间限制:2s 空间限制:256MB 限定语言:不限 题目描述: 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和…

Python3和Django的单元测试示例

1. unittest unittest是python自带的单元测试框架,unittest框架是受到 JUnit 的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框…

性能测试(二)—— JMeter元件作用域和执行顺序、JMeter示例、JMeter参数化

目录 一、JMeter元件作用域和执行顺序 1. 元件的基本介绍 2. 元件作用域 3. 元件执行顺序 二、JMeter使用示例 1. JMeter第一个案例 2. 重点组件 2.1 线程组 2.2 HTTP请求 2.3 查看结果树 三、JMeter参数化 1. JMeter参数化常用方式 2. 用户定义的变量 2.1 场景 …

详解OpenCV的线段绘制函数line()

函数line()用于在图像上绘制圆形。 函数line()利用两点确定一条直线的原理在图像中绘制出一条线段。 C原型如下: void cv::line(InputOutputArray img,Point pt1,Point pt2,const Scalar & color,int thickness 1,int lineType LINE_8,int shift 0)Python原…

智能优化算法:人工蜂鸟算法 - 附代码

智能优化算法:人工蜂鸟算法 摘要:人工蜂鸟算法( AHA )是 ZHAO 等 于 2021 年提出的一种新型元启发式优化算法 . 该算法模拟了自然界中蜂鸟轴向飞行、对角飞行、全方位飞行 3 种特殊飞行技能和引导觅食、区域觅食、迁移觅食 3 种智能觅食策略,并通过引入…

【大数据入门核心技术-Spark】(三)Spark 本地模式安装

目录 一、Spark集群三种部署模式 1、 Local模式 2、Spark Standalone模式 3、Spark on YARN模式 二、准备工作 1、Hadoop环境安装 2、下载spark 三、安装spark 1、解压 2、配置环境变量 3、修改配置文件 4、测试安装是否成功 四、运行测试spark 1、读取本地文件 …

【Java|golang】1760. 袋子里最少数目的球---逆向二分法

给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。 你可以进行如下操作至多 maxOperations 次: 选择任意一个袋子,并将袋子里的球分到 2 个新的袋子中,每个袋子里都有 正整数…

buildroot 升级软件包

因为软件漏洞问题,需要升级软件包,如 ncurses、libpwquality 等; 我目前采用的方法如下: 环境: 下载一个 buildroot 的最新版本: git clone git://git.buildroot.net/buildroot.git 我使用的 linux 环…