「Python实用秘技05」在Python中妙用短路机制

本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills

  这是我的系列文章「Python实用秘技」的第5期,本系列立足于笔者日常工作中使用Python积累的心得体会,每一期为大家带来一个几分钟内就可学会的简单小技巧。

  作为系列第5期,我们即将学习的是:Python中短路机制的妙用

  不同于物理学中的短路Short circuit)那般危险,Python中的短路机制非常有用,跟很多其他编程语言中的短路机制作用类似,一句话概括就是一段条件判断表达式在从左到右按顺序执行的过程中,提前确定了表达式的True/False结果,从而终止右边剩余的运算

  让我们通过几个简单的例子总结Python中可用的几种短路机制:

  • X or Y

  X or Y是最常用的短路机制,我们都知道只要XY中至少有一个为True时,整段判断表达式就为True,譬如下面的例子中,本来1 / 0会触发ZeroDivisionError: division by zero错误,但因为or左边的部分已经逻辑判断为TruePython的短路机制就会停止后续的执行,直接返回or左边的结果:

  而当or左边部分逻辑判断为False时,则会返回右边部分的结果:

  • X and Y

  类似X or Y的机制,X and Y会在X逻辑判断为False时提前终止后续的运算,只返回X部分的结果:

  • any()

  Python中的any()函数用于接受序列形式的多个等待逻辑判断的部分,并在序列中至少有一个部分逻辑判断为True时返回True

  而只要any()按顺序遇到第一个逻辑判断为True的结果,也会触发短路,正如下面的例子中只花费3秒就完成了判断过程,因为循环到1时触发了短路:

  • all()

  Python中的all()函数类似any(),会在传入序列中每个部分逻辑判断均为True时返回True,其也会在按顺序遇到第一个False时终止后续运算:

  • 比较运算符

  Python中用于数值大小比较的各个运算符也具有短路机制,从左到右,一旦执行到判断结果为False的部分都会终止运算:

  • 实际使用示例  

  当我们的代码中涉及到条件判断,且参与条件判断的值具有一定的运算成本时,就可以灵活运用短路机制来提升运行效率,譬如我们需要根据用户id信息向多个接口查询其权限,全部满足时将其标记为“超级权限”,就可以利用到短路机制。

  这里我们随意写几个具有时间成本的函数作为接口示意:

def api1(id_):
    
    time.sleep(1)
    
    return id_ in ['admin1', 'admin2']

def api2(id_):
    
    time.sleep(1)
    
    return id_ in ['admin1', 'admin2', 'su1', 'su2']

def api3(id_):
    
    time.sleep(1)
    
    return id_ not in ['ban1', 'ban2', 'ban3']

  利用短路机制在用户第一次没有满足条件时就终止后续判断,写法简洁:


  本期分享结束,咱们下回见~?

重要声明

本站资源大多来自网络,如有侵犯你的权益请联系管理员,我们会第一时间进行审核删除。站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!若内容若侵犯到您的权益,请发送邮件至:VB77@qq.com,我们将第一时间处理! 所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明


如果遇到付费才可观看的文章,建议升级会员或者成为认证用户。全站所有资源任意下免费看”。本站资源少部分采用7z压缩,为防止有人压缩软件不支持7z格式,7z解压,建议下载7-zip,zip、rar解压,建议下载WinRAR

给TA打赏
共{{data.count}}人
人已打赏
电脑教程

平台化建设思路浅谈

2022-2-18 14:59:52

电脑教程

Pytorch技法:继承Subset类完成自定义数据集拆分

2022-2-18 14:59:55

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索