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高性能编程
如果你觉得本文有帮助