Python小技巧学起来!如何简化大量的ifelifelse
今天在Github阅读EdgeDB〔1〕的代码,发现它在处理大量if。。。elif。。。else判断的时候,使用了一个非常巧妙的装饰器。我们来看看这个方法具体是什么样的。
正好双十二快到了,假设我们要做一个功能,根据用户的等级判断他可以获得的折扣。常规的if。。。elif。。。写法是这样的:defgetdiscount(level):iflevel1:大量计算代码discount0。1eliflevel2:大量计算代码discount0。2eliflevel3:discount0。3eliflevel4:discount0。4eliflevel5:discount0。5eliflevel6:discount3250。1else:return等级错误returndiscount
大家都知道,这样大量的if。。。elif。。。代码非常难看,也很难维护。并且每个if的内部有很多代码。这个函数就会被拉得非常长。
有一些同学知道,可以使用字典来改写这个太长的if判断:defparselevel1():大量计算代码discount0。1returndiscountdefparselevel2():大量计算代码discount0。2returndiscountdefparselevel3():大量计算代码discount0。3returndiscountdefparselevel4():大量计算代码discount0。4returndiscountdefparselevel5():大量计算代码discount0。5returndiscountdefparselevel6():大量计算代码discount3250。1returndiscountdiscountmap{1:parselevel1,2:parselevel2,3:parselevel3,4:parselevel4,5:parselevel5,6:parselevel6,}discountdiscountmap。get(level,等级错误)
但今天我学到的这个方法,比用字典更简单。我们先来看它的效果:valuedispatchdefgetdiscount(level):return等级错误getdiscount。register(1)defparselevel1(level):大量计算代码discount0。1returndiscountgetdiscount。register(2)defparselevel2(level):大量计算代码discount0。2returndiscountgetdiscount。register(3)defparselevel3(level):大量计算代码discount0。3returndiscountgetdiscount。register(4)defparselevel4(level):大量计算代码discount0。4returndiscountgetdiscount。register(5)defparselevel5(level):大量计算代码discount0。5returndiscountgetdiscount。register(6)defparselevel1(level):大量计算代码discount3250。1returndiscountdiscountgetdiscount(3)print(f等级3的用户,获得的折扣是:{discount})
运行效果如下图所示:
这样写,比用字典的方式更直观,比直接用if。。。elif。。。更简洁。
那么,这个装饰器valuedispatch是怎么实现的呢?密码就藏在这个开源项目EdgeDB的源代码〔2〕中,核心代码只有20多行:
并且,还能够实现或查询。例如用户等级为2或者3的时候,折扣都是0。2,那么代码可以写成:getdiscount。register(2)getdiscount。register(3)defparselevel2(level):大量计算代码discount0。2returndiscount
运行效果如下图所示:
它这个代码目前只能实现相等的查询。但其实只要对这个代码稍作修改,我们就能实现大于、小于、大于等于、小于等于、不等于、in等等判断。如果大家有兴趣的话,请在文章下面留言,我们明天就来说说怎么对这个代码进行改造,实现更多的逻辑判断。
详谈超额亏损会计处理比如甲认缴80万,乙认缴10万,丙认缴10万设立A公司,甲、乙已实缴,丙未实缴。章程或股东之间没有明确约定分红比例,则分红时,按实缴比例,甲按89分配,乙按19分配,丙无分配,……
开悟之生命与宇宙我们人类所定义的生命,只是地球上的一切生物,也只是这种形态被叫作生命。生命,只是宇宙中的一部分。宇宙中不止有这种生命,而且应该还有其他形态的生命。不仅指我们能……
痛失附属公司决策权!51信用卡支付牌照夺权战输了?刚刚失去一张小额贷款牌照,51信用卡貌似又将痛失一张支付牌照。51信用卡陷入多事之秋!近年来,作为一家港股上市公司,51信用卡不仅业绩连番亏损,股价也一路跳水。……
先别急着换机,有六款新机已在路上,实力基本都清晰了现在的手机市场中诞生了非常多的新机,但是对于想换机的消费者来说,现在这个阶段做等等党比较好。因为接下来的手机市场中还会有非常多的新机要和大家见面,并且在参数方面都变得很激进,又……
不用跟往事挥手时间如水易逝,还好有记忆将它定格。随手抓起一缕过往的时光,凝视。总有远去的背影,就如夏日的流萤,落入眼眸,浅暖于心,在黑暗的时刻,伴我们身侧,给我们一个光明的角落。……
河南嵩山龙门要如何补强中场?郝伟弃用的优秀中场就是不错的选择现在所有人都知道河南队要补强中场,因为哈维尔手中只有王上源一位中场球员可以放心使用,并且王队长已经打满了前900分钟的比赛,必须有球员帮助王6。现在阿德里安因为年龄和体能问题,……
电动10方路面清洗车比亚迪路面清洗车新能源汽车包括纯电动汽车、增程式电动汽车、混合动力汽车、燃料电池电动汽车、氢发动机汽车等。电动10方路面清洗车比亚迪路面清洗车为纯电动新能源环卫车。纯电动汽车(BladeEle……
乔治詹姆斯的表现不可思议我见过他的那种表情很可怕今日,快船133115客场击败湖人,取得三连胜。赛后,快船后卫保罗乔治接受了采访。谈到湖人前锋勒布朗詹姆斯今日狂砍46分的火热状态,乔治说:这很可怕,我之前见过勒布朗脸上……
民间十大美食代表,看看有你的家乡吗?久醉是个闲云散鹤的人,懒散惯了。喜欢到处游玩,但玩法很是单调,从不游玩景点名胜,只习惯品味各处风土人情,尝尽天下美食。出来三年多,去过很多的地方,不单单是省会首府之类的大……
三星发布BespokeAIOven智能烤箱,内置摄像头,可防IT之家1月4日消息,三星在CES2023上发布了一款BespokeAI智能烤箱,内置摄像头,将智能与烹饪技术相结合,帮助用户轻松制作出满足饮食偏好的美味佳肴。据介绍,该……
如果常规赛现在结束,入选最佳一阵的应该是以下五位球员本赛季的常规赛仅剩余十场左右,如果现在就结束常规赛,入选最佳阵容的球员应该是以下这五位:1、卢卡东契奇2、詹姆斯哈登3、杰森塔图姆4、扬尼斯安特托昆博……
仙宠物语开放删档内测,宠物属性及技能的养成教学在这各位读者好,这里是大秦游戏,想获得更多的游戏内容记得关注我哦明天《仙宠物语》最后开放一次删档内测,可能有的小伙伴就要问了:《仙宠物语》是什么游戏啊,那么我来告诉大家吗《仙……