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

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等等判断。如果大家有兴趣的话,请在文章下面留言,我们明天就来说说怎么对这个代码进行改造,实现更多的逻辑判断。

20222028中国单臂协作机器人市场现状研究分析与发展前景预测报告本报告研究中国市场单臂协作机器人的生产消费及进出口情况,重点关注在中国市场扮演重要角色的全球及本土单臂协作机器人生产商,呈现这些厂商在中国市场的单臂协作机器人销量收入价格毛利率市场苹果或将推出双口35WUSBC充电器据悉,苹果将首次推出双USBC接口的充电器,这款35W充电器可为多种苹果设备供电,还没有有关这款配件何时推出的消息,不过这款双C口充电器的推出将是苹果接口的一次重大革新。4月10日5重净化系统,这款净水器不容小觑前言大家好,我是北彦川日常家用水用的都是自来水,然后有的时候,烧开水,发现水壶里面总是有些杂志,让人感觉非常的不爽,喝水前总是先让其沉淀一会,才敢喝,之前还可以买桶装水,搬了家之后小米11Pro降1700,小米11Ultra我降2000!看你怎么选?现阶段小米这一牌子的旗舰手机早已迈入升级换代時间,在小米12全系列公布以后,小米11系列产品快速沦落了关注度不高的旗舰级。与往日一样,为了更好地让旧机清仓处理新手机维持关注度,只能曝硬件可圈可点小米12Ultra,小米11彻底失宠,降到冰点价曝光将于2022年5月10日正式闪亮登场小米12Ultra作为最强影像旗舰,曝光将于2022年5月10日正式闪亮登场小米12Ultra自然不会错过120瓦超级快充,曝光将于2022java开发精准优化ifelse,干掉,过多,烂代码大家好,今天,跟大家聊一聊,现实中的代码往往存在着过多的ifelse。虽然ifelse是必须的,但滥用ifelse会对代码的可读性可维护性造成很大伤害,进而危害到整个软件系统。现在linux之type命令显示指定命令的类型。命令语法typeafptPnamename命令作用显示要查找的命令的信息。控制查找范围和行为。显示要查找的命令优先级最高的类型。命令选项a在环境变量PATH中查我们的宇宙存在边界吗?边界之外又是什么呢?说到宇宙有没有边界这个问题,首先必须要明确宇宙的定义,否则问题本身就失去了意义。什么是宇宙呢?并没有一个标准答案。普遍的定义是这样的宇宙是万事万物的集合体,或者是宇宙是时间和空间的量子力学如何加速让好事发生?导读一切都是能量,一切都是波!波和粒是相互转化的!当我们讲一句话时候,这个声波就会在宇宙当中飘啊飘当它飘到有点远的时候,依然在!只是我们的耳朵没有办法分辨。当你有一种坏情绪的时候,对马斯克,我们要正反两面看我们承认马斯克是个牛人,一己之力创造了很多大多数人创造不起来的事迹。看看它创立的企业特斯拉SPACEX星链等等,都很有创造力。这你得承认它的创意和工程实践能力都是独一无二的。现在他特斯拉创始人成世界首富,身价2190亿美元,这是什么概念?近20年世界首富的宝座一直都被美国人所占据,先是微软创始比尔盖茨当了十几年世界首富,后又有亚马逊创始人贝佐斯,而根据福布斯发布的最新数据显示,特斯拉创始人马斯克成了新的世界首富。而
iOS鸠占鹊巢,3亿外国人却在用中国系统,苹果感受到压力了iPhone13系列发布后,在国内市场的销量一路上扬,从双十一京东的销量排行来看,虽然iPhone13不敌RedmiK40屈居第二,但前者是前十榜单上售价最高的手机,即使销量少一些中国科技圈传来好消息!小米天马达成合作,三星感到压力了近日,天马微电子与小米在武汉天马G6产业基地签订协议,双方将合作建设新型显示技术联合实验室。小米大家应该很熟悉了,至于天马,有关注手机屏幕的同学应该也不会陌生。天马是一家从事显示器红米手机性价比挺高的,但是容易出问题,网友们怎么看?看到两位网友的回答我真的哭笑不得,为啥能接受红米的高性价比,就不能小米手机容易出问题的事实呢?这么护犊子是不是太溺爱偏激了一点,要知道今年小米11才因为烧WiFi,官方售后都出来了早盘华为造车与许家印造车不在一个级别上根据12月23日消息,华为冬季旗舰新品发布会今天线上线下同步召开。此次发布会上,华为发布了HUAWEIP50Pocket旗舰折叠屏手机HUAWEIWATCHD腕部心电血压记录仪华为华为小米纷纷入局,国产屏制造商崛起迅速,撼动三星的统治地位众所周知,韩国三星在屏幕制造上,一直是行业佼佼者,凭借多年在屏幕技术上的深耕和实力,让三星也成为了其他手机厂商的重要供应商,但是相信最近几年,可能很多人都听说国产京东方华星光电天马量体裁衣助力数字化转型来源人民网人民日报如今,数字化转型已经不是要不要做的问题,而是该如何做的问题数字化早已变成了刚需,是政府企业提质增效创新发展的关键一招。尽管遭遇诸多挑战,华为近年来依然保持了稳健发(原创)流量越大,责任越大!小红书岂能放任不健康内容泛滥大众网海报新闻记者海见青岛报道近日,小红书APP因审核不严存在大量低俗及涉嫌违法内容,引发媒体关注。据央视新闻报道,小红书APP平台不仅对涉及未成年人不健康的隐私内容充满性暗示的视vivo发布1399元的Y32,能固守住千元机市场吗?编者按千元机市场如今已经很少有人关注了,绝大多数用户讨论的也都是旗舰次旗舰包括中端的明星产品,但事实上,千元机市场一直需求量也并不少。这次vivo发布的Y32,在不支持5G的前提下同时使用小米MIX4和华为P50Pro,两个月后,憋了太多话想说在国内手机市场中,小米和华为都是用户喜欢的手机品牌,小米也常常把华为作为最大的竞争对手,但是华为这个对手不容小觑,自研麒麟芯片以及自带国产光环让华为一路走向巅峰,曾经的出货量甚至达如果滴滴退出市场,滴滴司机从业者影响大吗?作为一个网约车司机,我觉得没有任何影响滴滴司机一点都不受影响。去开岀租车就好了。在说了开出租车比开网约车有尊严。没滴滴之前大家也没闲着,没滴滴还有其他网约车平台没了张三,还有李四,协同办公市场没有赢家通吃,百度如流2。0如何出奇制胜?智东西(公众号zhidxcom)作者三北编辑漠影智东西12月13日报道,近日,百度重磅推出其面向企业服务市场的如流智能工作平台2。0,主要包括智能知识管理智能会议智能工作台三大智能