if和else if的用法,if与else的用法

  if和else if的用法,if与else的用法

  花下猫语:日常代码经常会遇到if.elif.else条件分支选择的问题。说实话,我更喜欢大部分情况下老老实实写if.elif,把每个分支下的内容提取出来作为独立的函数。结构清晰,意图明确,写和读都非常方便。但是在一些特殊情况下,可以通过更优雅的格式(比如之前分享的《不使用 if-elif 语句,如何优雅地判断某个数字所属的等级?》或者今天分享的这篇文章)来扩展代码编写的思路。

  今天在Github上看EdgeDB[1]的代码,发现在处理大量if.elif.else判断时,用了一个非常聪明的装饰器。我们来看看这个方法是什么样的。

  今天正好是双十一。假设你做了一个函数,根据一个用户的级别来判断他能得到的折扣。的常见if.elif .格式如下:

  Get _ discount (level): iflevel==1:批量计算代码 discount=0.1eliflevel==2:批量计算代码 discount=0.2 elif level==:discount=0.360 discount=32-5 * 0.1 else:return level error return discount这么大数量的if。埃利夫。代码很难看,很难理解,而且每个if里面都有很多这样的函数,会拉很长时间。

  有些学生知道,你可以用字典重写这个过长的if判断:

  DEF _ LEVEL _ 1(大量计算代码(Discount=0.1 return Discount _ LEVEL _ 2):)大量计算代码)Discount=0.2 retre 0.3 return discountdefparse _ LEVEL _ 4(:批量计算代码 DiscountDefparse _ level3360 批量计算代码 0 批量计算代码 Discount=32-5 * 0.1 return Discount Discount Discount 2:parse _ LEVEL _ 2,3: parse _ level _ 3,4333333:

  @ value _ dispatchedefget _ discount(level):返回级别错误(@ get _ discount . register(1)1)DEF parse _ level _ 1:海量计算代码 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))。360 批量计算代码 discount=0.4 return discount @ get _ discount . register(5)def parse _ level _ 5)level)3360 批量计算代码

  :大量计算代码 discount=3 2-5 * 0.1 return discount=get _ discount(3)print(f 三级用户,得到的折扣为:{discount} )运行效果如下图所示:

  这样写起来比用字典更直观,比直接用if更简洁. 否则如果.

  那么,这个decorator value_dispatch是如何实现的呢?密码隐藏在这个开源项目EdgeDB的源代码[2]中。核心代码只有20多行:

  而且,它还可以实现或查询。例如,当用户级别为2或3时,折扣为0.2,则代码可以写成:

  @ get _ discount . register(2)@ get _ discount . register(3)def parse _ level _ 2(level):大量计算代码 discount=0.2returndiscount运行效果如下图所示:

  目前这段代码只能实现相等查询。但其实只要稍微修改一下这段代码,就可以实现大于、小于、大于等于、小于等于、不等于、in等判断。如果你有兴趣,请在文章下方留言,明天我们将讨论如何对这段代码进行转换,以实现更符合逻辑的判断。

  参考文献

  [1]EdgeDB:https://github . com/EdgeDB/EdgeDB

  [2]源代码:https://github.com/edgedb/edgedb/blob/master/edb/common/value _调度. py

  Python猫技术交流群开放啦!群体既有国内一二线厂商的员工,也有在国内外读大学的学生。既有勤勤恳恳编程十几年的月亮,也有中小学刚入门的新人。学习氛围不错!想入群的同学,请在公众号回复“交流群”,获取猫哥的微信(谢绝广告党,非诚勿扰!)~

  还不过瘾?试试它们

  终于懂了:协程思想的起源与发展

  Python爬虫最强组合httpx+parsel测评

  收藏了 30+ 实用的 Python 办公自动化库!

  通过“四不要”,掌握 Python 的 Lambda 函数

  OrderedDict 是如何保证 Key 的插入顺序的?

  Python猫荐书系列之五:Python高性能编程

  如果你觉得本文有帮助

  请慷慨分享点赞,感谢啦

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: