范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python小技巧学起来!如何简化大量的ifelifelse代码?

  今天在 Github 阅读EdgeDB[1]的代码,发现它在处理大量if...elif...else判断的时候,使用了一个非常巧妙的装饰器。我们来看看这个方法具体是什么样的。
  正好双十二快到了,假设我们要做一个功能,根据用户的等级判断他可以获得的折扣。常规的if ... elif...写法是这样的:  def get_discount(level):       if level == 1:           "大量计算代码"           discount = 0.1       elif level == 2:           "大量计算代码"           discount = 0.2       elif level == 3:           discount = 0.3       elif level == 4:           discount = 0.4       elif level == 5:           discount = 0.5       elif level == 6:           discount = 3 + 2 - 5 * 0.1       else:            return "等级错误"       return discount
  大家都知道,这样大量的if ... elif...代码非常难看,也很难维护。并且每个 if 的内部有很多代码。这个函数就会被拉得非常长。
  有一些同学知道,可以使用字典来改写这个太长的 if 判断:  def parse_level_1():       "大量计算代码"       discount = 0.1       return discount   def parse_level_2():       "大量计算代码"       discount = 0.2       return discount   def parse_level_3():       "大量计算代码"       discount = 0.3       return discount   def parse_level_4():       "大量计算代码"       discount = 0.4       return discount   def parse_level_5():       "大量计算代码"       discount = 0.5       return discount   def parse_level_6():       "大量计算代码"       discount = 3 + 2 - 5 * 0.1       return discount   discount_map = {    1: parse_level_1,     2: parse_level_2,     3: parse_level_3,     4: parse_level_4,     5: parse_level_5,     6: parse_level_6,   }   discount = discount_map.get(level, "等级错误")
  但今天我学到的这个方法,比用字典更简单。我们先来看它的效果:  @value_dispatch   def get_discount(level):       return "等级错误"   @get_discount.register(1)   def parse_level_1(level):       "大量计算代码"       discount = 0.1       return discount   @get_discount.register(2)   def parse_level_2(level):       "大量计算代码"       discount = 0.2       return discount   @get_discount.register(3)   def parse_level_3(level):       "大量计算代码"       discount = 0.3       return discount   @get_discount.register(4)   def parse_level_4(level):       "大量计算代码"       discount = 0.4       return discount   @get_discount.register(5)   def parse_level_5(level):       "大量计算代码"       discount = 0.5       return discount   @get_discount.register(6)   def parse_level_1(level):       "大量计算代码"       discount = 3 + 2 - 5 * 0.1       return discount   discount = get_discount(3)   print(f"等级3的用户,获得的折扣是:{discount}")
  运行效果如下图所示:
  这样写,比用字典的方式更直观,比直接用if ... elif...更简洁。
  那么,这个装饰器value_dispatch是怎么实现的呢?密码就藏在这个开源项目EdgeDB的源代码[2]中,核心代码只有20多行:
  并且,还能够实现或查询。例如用户等级为2或者3的时候,折扣都是0.2,那么代码可以写成:  @get_discount.register(2)   @get_discount.register(3)   def parse_level_2(level):       "大量计算代码"       discount = 0.2       return discount
  运行效果如下图所示:
  它这个代码目前只能实现相等的查询。但其实只要对这个代码稍作修改,我们就能实现大于、小于、大于等于、小于等于、不等于、in等等判断。如果大家有兴趣的话,请在文章下面留言,我们明天就来说说怎么对这个代码进行改造,实现更多的逻辑判断。

细腻胶片颗粒的时尚人像沐浴阳光中的性感身姿LachlanBailey是一位时尚和人像摄影师,目前居住在纽约市。Lachlan最初来自澳大利亚,在那里学习电影和摄影,他于2001年移居伦敦,然后于2008年移居纽约。在协助其倒计时!首届温州瓯味预制菜创新创业大赛决赛27日开赛3月27日,由温州市总工会温州市农业农村局温州市市场监督管理局温州市科学技术协会和温州市现代服务业发展集团有限公司联合主办,浙江东方职业技术学院承办,温州预制菜产业联盟协办的首届温初春最推荐的养生法勤梳头!经过一个漫长而干燥的冬季,头发好像变得更加脆弱了水分流失毛鳞片结构破坏干燥分叉易断入春后,万物复苏,此时人体阳气升发足,新陈代谢旺,正是润养生发的好时节。春季养发常梳头!俗话说,头关注贾跃亭梦想更进一步,FF91Futurist生产倒计时5天文懂车帝原创刘艺伟懂车帝原创行业3月25日,贾跃亭在社交平台发文称,倒计时5天!我们即将开始生产(SOP)FF91Futurist,这意味着距离我们在2014年立下的智能电车时代下9288公里,七天六夜,沿着西伯利亚铁路奔向莫斯科(一)备注这是我一个同乡车迷朋友2014年的经历,授权给我2014年发布在其他平台的,如果你看过,那就给点个赞吧。文中均用第一人称来写,文中的各种情形都是2014年的经历,请勿按照现在的外媒记者游广州点赞羊城发展3月26日,来自中国国际新闻交流中心的外媒记者来到广州市城市规划展览中心花城广场生物岛实验室等地参访,多方位感受广州的发展成果。在广州市城市规划展览中心,外媒记者们通过立体而生动的春风吹,纸鸢飞!八师石河子市首届风筝文化节开幕春暖花开,万物复苏,正是外出踏青放风筝的好时候。3月25日,由八师石河子市人民政府主办,八师石河子市党委宣传部八师石河子市文化体育广电和旅游局潍坊市文化和旅游局潍坊国际风筝会综合服京东超市春茶节开幕产地直采等三大举措助龙井三年增30让高品质茗茶价格更公道3月26日,京东超市第九届春茶节启动仪式在杭州举行。启动仪式上,京东超市揭示了龙井茶近三年交易额保持30稳定增长的源动力。通过产地直采供应链赋能等举措,扶持像西湖龙井这样优质的国家龙眠深山访龙井文杨俊杰我以前所知道的桐城境内的龙井瀑布有两处,均在我的家乡吕亭镇。一处位于吕亭镇洪桥村的龙井村民组,另一处位于双龙村的叶家湾红色营地,这两处瀑布我都去过,但与我想象中的该有的气势央视点赞!绵阳茶树樱花相点缀茶香花香满山岗今天(3月27日)上午,央视朝闻天下栏目以春天里的中国为主题,关注并报道了绵阳北川茶树樱花相点缀,茶香花香满山岗的美景。以下是报道内容现在我们来到了四川绵阳北川羌族自治县擂鼓镇,在安顺10个最佳旅游景点,安顺好玩的地方,黄果树瀑布在贵州哪里安顺市位于中国贵州省,距贵州省会贵阳西南约90公里(1。52。5小时车程)。你可能从来没有听说过这个城市,但是,你一定知道它的黄果树瀑布,中国乃至整个亚洲最大的瀑布!除了体量大,黄
蓝天野圆满归去追思会上众人回忆他不做手术不化疗的人生选择从6月8日去世,人们似乎一直在等待这样一场告别仪式,7月5日,北京人艺召开蓝天野追思会,爱他的人们终于坐在一起,用朴素真挚的语言追忆他描摹他留住他张和平他给我写过三封信,两封是毛笔花式避暑新玩法人均200承包一夏的吃喝玩乐在泰山北麓的秘境城堡中,藏着一个新潮浪漫的宝藏野奢休闲主题乐园,绝对不输上海迪士尼和广州长隆。人均200,一站式游乐度假,集合了你能想到的所有浪漫玩法!不管是家庭出游姐妹拍照情侣约胃不好的人吃什么养胃?首先有请主食登场什么是主食?这个我个人的理解是身体摄入最多,胃吸收消化最多,而且获取容易的食物。是不是很多朋友就想到了大米?但是在这里不推荐大米,知道为什么吗?让我来跟大家解释解释学习不好是专注力问题?不要再被骗了,带你了解专注力的本质孩子专注力有没有问题,只要看一点,孩子做自己喜欢的事,注意力是否集中?如果比较专心,那说明孩子的专注力是正常的。如果注意力涣散无法集中,那就说明有问题。专注力有问题不是训练可以解决问界M7发布2小时订单破万辆,经济不好为啥买车还这么猛7月4日,由赛力斯汽车和华为联合设计的增程式电动SUV问界M7正式发布,同时开始接受预订。从2小时订单破万辆的成绩看,这又是一个爆款车型,而且凶悍程度远超6月21日刚刚发布的理想L有哪些句子治愈最近心情不好的你?1慢品人间烟火色,闲观万事岁月长。2生活总是来来往往,千万别等来日方长。3借一把清风吹开阴霾,接一碗烈酒谈笑风生。4要珍惜的人很多你在其中名列前茅。5愿你内心山河壮阔,始终相信人间望丛祠的古韵荷塘上周五早上,下过雨,天气比较凉快,才有了出门的勇气。与女儿约好去望丛祠拍荷花,按导航的停车场过去,结果还是像去年12月去过的那样,门口的停车区域整改,还是拦着进不去。这都过去半年时国之大道G219新藏线,盘它之前你应该了解清楚的10个问题自驾人越玩越野,如今,G318逐渐不香了,而盘G219的人越来越多。我刚刚走完新藏线,趁着感受还新鲜,赶快给大家说道说道。1G219概况国之大道G219,有新旧两个概念。老的G21驼奶怎么喝比较好?在现阶段疫情常态化的大环境下,人们越来越重视日常饮食健康。中国居民膳食指南建议每人每天要摄取300g乳制品,而奶作为乳制品的初始原料,营养丰富,为机体提供所需的营养和能量。因此,乳又到了吃西瓜的季节,安心吃西瓜,这么做炎炎夏日,吃西瓜是不少人消暑的首选中国人有多爱吃西瓜?国家统计局专门就西瓜算过一笔账如果按一个西瓜10斤计算,中国人每年要吃掉160亿个西瓜666你是怎么吃西瓜呢?勺子挖着吃?还是认识胆固醇四不用在意鸡蛋中的胆固醇问你一个问题,在你吃鸡蛋的时候,是不是会想起,有人说过蛋黄是高胆固醇食物,尽量不要吃?如果你信了,害怕吃了蛋黄会影响体内的胆固醇,并且在吃鸡蛋的时候把蛋黄扔了。真是暴殄天物啊。我的