百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

代码整洁之道:用字典替换冗长的if-else语句

csdh11 2025-01-26 21:48 27 浏览

最近在写Python代码的时候,你是否也遇到过这样的情况:为了处理多种情况,写了大量的if-else语句,代码不仅看起来冗长,而且维护起来也很麻烦?今天,我们就来聊聊如何使用Python中的字典来优化这种情况,让你的代码更加简洁高效。

开篇:if-else的困境

在日常编程中,我们经常需要根据不同的条件执行不同的操作。最常见的做法就是使用if-else语句。例如,我们要根据不同的食物名称返回不同的价格,可能会这样写:

def getPrice(food_item):
    if food_item == "Burger":
        return 100
    elif food_item == "Pizza":
        return 200
    elif food_item == "Juice":
        return 50
    elif food_item == "Tofu":
        return 150

这段代码虽然可以正常运行,但是当食物种类增加时,if-else语句会变得越来越长,代码的可读性和可维护性也会随之降低。这样的代码不仅看起来很乱,而且修改起来也很容易出错,给未来的代码维护留下了隐患。

核心:字典的优势

有没有更好的方法来解决这个问题呢?答案是肯定的,我们可以使用Python中的字典。字典是一种以键值对形式存储数据的数据结构,非常适合用来表示这种“条件-结果”的映射关系。我们可以将食物名称作为键,价格作为值,然后直接通过键来获取对应的值,而不需要写一堆if-else语句。

下面是用字典优化后的代码:

food_items_dict = {
    "Burger": 100,
    "Pizza": 200,
    "Juice": 50,
    "Tofu": 150
}

def getPrice(food_item):
    return food_items_dict.get(food_item, 0)

这段代码简洁了很多,可读性也大大提高。我们使用了字典的 get() 方法来获取食物的价格get() 方法的好处在于,如果字典中不存在对应的键,它会返回我们指定的默认值 (这里是 0),而不会抛出异常。这样既避免了错误,也增加了代码的健壮性。

代码实践

我们来实际运行一下这两段代码:

# 第一种方法 (if-else)
def getPrice_if_else(food_item):
    if food_item == "Burger":
        return 100
    elif food_item == "Pizza":
        return 200
    elif food_item == "Juice":
        return 50
    elif food_item == "Tofu":
        return 150

# 第二种方法 (字典)
food_items_dict = {
    "Burger": 100,
    "Pizza": 200,
    "Juice": 50,
    "Tofu": 150
}

def getPrice_dict(food_item):
    return food_items_dict.get(food_item, 0)

# 测试
food = "Pizza"
print(f"Price of {food} (if-else): {getPrice_if_else(food)}")
print(f"Price of {food} (字典): {getPrice_dict(food)}")

food = "Sushi"
print(f"Price of {food} (if-else): {getPrice_if_else(food)}") # 这里会报错
print(f"Price of {food} (字典): {getPrice_dict(food)}")

可以看到,使用字典不仅代码简洁,而且还更加健壮。当输入的食物不在字典中时,if-else 的方法会报错,而字典的方法会返回默认值0,防止程序崩溃。

进阶:match-case语句

当然,除了字典,在Python 3.10及以上版本中,我们还可以使用 match-case 语句来处理这种情况。match-case语句类似于其他语言中的 switch-case 语句,可以让代码更加清晰易懂。

def getPrice_match(food_item):
    match food_item:
        case "Burger":
            return 100
        case "Pizza":
            return 200
        case "Juice":
            return 50
        case "Tofu":
            return 150
        case _:
            return 0

这里我们使用了 matchcase 关键字,结构更加清晰。 case _: 代表了默认情况,如果前面的 case 都没有匹配上,就会执行默认的 return 0。但是相比较字典, match-case 语句在数据量很大的情况下,效率会低于字典。

总结与建议

在Python中,使用字典替代冗长的if-else语句可以大大提高代码的可读性和可维护性。字典不仅让代码更加简洁,还更加健壮。match-case 语句作为可选方案,也值得我们学习和使用。

  • 优先使用字典: 当你需要在多个选项中进行选择时,优先考虑使用字典来存储选项和结果的映射关系。
  • 善用get()方法: 使用字典的 get() 方法可以避免键不存在时抛出异常,同时可以设置默认值。
  • 了解match-case语句: 在Python 3.10+版本中,可以尝试使用 match-case 语句,让代码更加清晰易懂。

希望这篇文章能够帮助你在日常的Python开发中写出更简洁,更优雅的代码。你平时在代码优化中有什么技巧吗?欢迎在评论区分享你的经验!

相关推荐

知名软件变“木马”:2小时感染10万电脑

近日,腾讯电脑管家监测发现,一款通过“驱动人生”升级通道,并同时利用“永恒之蓝”高危漏洞传播的木马突然爆发,仅2个小时受攻击用户就高达10万。腾讯电脑管家可精准拦截该病毒攻击,管家团队也将持续跟踪该款...

腾讯电脑管家发布病毒预警:“驱动人生木马”爆发,2小时感染10万台电脑

新华网天津12月15日电(记者周润健)腾讯电脑管家15日紧急发布病毒预警,14日下午,腾讯电脑管家监测发现,一款通过“驱动人生”升级通道,并同时利用“永恒之蓝”高危漏洞传播的木马突然爆发,仅2个小时受...

全新“撒旦”勒索病毒来袭 瑞星推出独家解密工具

新华社北京7月26日电瑞星威胁情报平台近日发现多起国内用户感染“撒旦”勒索病毒事件。据瑞星安全研究人员介绍,该病毒运行后会加密受害者计算机文件,加密完成后会用中英韩三国语言索取1个比特币作为赎金,并...

新勒索病毒“WannaCry”疯狂来袭 乌克兰副总理电脑中招

据外媒报道,从6月27日开始,一种新勒索病毒再次疯狂来袭,已席卷欧洲多个国家,连乌克兰副总理的电脑都已中招。报道称,这轮病毒足以与五月席卷全球的勒索病毒“WannaCry”的攻击性相提并论。该病毒代号...

蠕虫病毒利用“永恒之蓝”漏洞传播 单位局域网受威胁最大

日前,火绒安全团队通过“火绒威胁情报系统”发现蠕虫病毒“Worm/Sharp”正在全网传播,其中在政府、企业、学校、医院等单位的局域网具有非常强的传播能力。该病毒通过“永恒之蓝”漏洞、多个电脑常用端口...

新病毒爆发:利用“永恒之蓝”传播,2小时感染10万台电脑挖矿

驱动人生发布的声明。据腾讯安全专家介绍,通过追溯病毒传播链发现,该病毒自12月14日约14点,利用“驱动人生”、“人生日历”等软件最早开始传播,另有约30%的传播通过“永恒之蓝”漏洞在局域网内进行主动...

逍遥安卓模拟器定制手游电脑版 手机电脑账号完全互通

从今年起大量回合制端游转向手游方向,无论是《梦幻西游》、《大话西游》、《神武》还是刚刚发行的《问道》手游,都是非常重度需要大量时间来做任务挂机升级的游戏。很多人习惯了端游的时候一个电脑可以多开的玩法,...

安卓模拟器绿色U盘移动版 公司玩游戏无痕迹

安卓模拟器已经不稀奇了!随着安卓手游的盛行,特别是《梦幻西游手游》之类的重度手游发布,玩手游花的时间也越来越多。用手机玩这些游戏存在着屏幕小、点量少、费流量还有容易被电话打断,在电脑上用安卓模拟器玩游...

苹果推出 iCloud 照片和视频转移服务:可转移至谷歌相册

IT之家3月4日消息据MacRumors今日报道,苹果公司本周推出了一项新服务,帮助iCloud用户方便快捷的将其存储的照片和视频转移到谷歌照片上。苹果在其支持文档中表示,用户可以登...

NAS PK台,4核带m.2的威联通TS-264C vs 双核TS-462C

因为618年中大促看到威联通TS-264C和TS-462C这两机型售价差不多,就做个比较以供参考。毕竟作为自2007年以来就一直卖威联通的NAS老油来说,对威联通各NAS机型的识别还是相当全面的,对不...

前端学AI(七):构造 RAG 系统评估测试数据集

引言在基于DeepSeek+Chroma+LangChain开发一个简单RAG系统...

惨重教训!调查显示挪威“英斯塔”号宙斯盾舰撞油轮后本不必“丧命”

最新公布的调查报告显示,挪威皇家海军“英斯塔”号护卫舰2018年11月与油轮相撞后,如果其舰员接受了更好的损管训练,并且对舰艇的稳定特性更加熟悉的话,这艘宙斯盾型战舰本来是可以挽救的。↑挪威“英斯塔”...

「必买」盘点2021年男人们的败家清单,越“败”越香

心里总想买点啥?看看《必买》,全网最有料的场景种草指南。草原割不尽,春风吹又生。在过去的2021年,不断被各种数码产品种草,一直在买买买,剁手不停。大部分产品都经过详细的对比做足了功课,也有部分是一时...

实现浏览器播放rtsp视频流的解决方案

有同学问道:需要实时播放摄像头rtsp视频流,而浏览器不能直接播放,怎样解决?实现这个需求可以通过插件或者转码来实现。要实现这个目的,可以采用的方案非常得多,有商业的也有开源的,这里主要列举一些开源的...

ISO9000你知道多少?

1ISO9000族标准是什么?ISO9000族标准是指由国际标准化质量管理和质量保证技术委员会(ISO/TC176)制订的所有国际标准。ISO9000族标准可帮助各种类型和规模的组织实施并有效运行质...