作者 | 费弗里

来源 | Python大数据分析

本期我们即将学习的是: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']

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


本期分享结束,大家学起来~

在 Python 中妙用短路机制相关推荐

  1. Python中的字符串驻留机制

    字符串驻留机制(引用计数机制): 字符串驻留是一种在内存中仅保存一份相同且不可变字符串的方法. 系统维护interned字典,记录已被驻留的字符串对象. 对于短字符串,将其赋值给多个不同的对象时,内存 ...

  2. python中生成器的惰性机制

    生成器有一个惰性机制,只有当你需要的时候才给你(一个个的取),而不是一下字全部给你.可能有些抽象,来一个例子 吧. 普及一个小知识**:一只母鸡并不是生一辈子鸡蛋,有一个时间段.** 例:小明和小红两 ...

  3. python中的name mangle机制

    #测试python中的name mangle机制class A:__attr1=1 #私有 类属性def __init__(self):self.attr2=2 #私有 对象属性@classmetho ...

  4. Python中的内存管理机制

    Python是如何进行内存管理的 python引用了一个内存池(memory pool)机制,即pymalloc机制,用于管理对小块内存的申请和释放 1.介绍 python和其他高级语言一样,会进行自 ...

  5. 简述python中的内存管理机制_Python中的内存管理机制

    Python是如何进行内存管理的 python引用了一个内存池(memory pool)机制,即pymalloc机制,用于管理对小块内存的申请和释放 1.介绍 python和其他高级语言一样,会进行自 ...

  6. Python中字符串的驻留机制和常用方法

    在python中字符串是基本数据类型,是一个不可变的字符序列. 字符串的驻留机制 使用三种不同的赋值方式赋值同一个字符串 a = 'python' b = "python" c = ...

  7. Python中布尔类型 短路计算原理

    Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ...

  8. python中的垃圾回收机制_python里面的垃圾回收机制

    1.引用计数机制: python里每一个东西都是对象,它们的核心就是一个结构体:PyObject typedef struct_object { int ob_refcnt; #引用计数 struct ...

  9. 简述python垃圾回收机制_python中的垃圾回收机制简述

    2020年12月5日21:47:35 王凯玉 python中的垃圾回收机制 引用计数 # 引用计数 引用计数是编程语言中的一中内存管理技术,可以将资源的被引用次数保存起来. 当引用计数为0时,资源将被 ...

最新文章

  1. MySQL 的 binlog 编号竟然可以这么大!
  2. 解决com.xpand.. starter-canal 依赖引入问题
  3. 二叉树的右视图—leetcode199
  4. spring aop实例讲解_Spring框架核心知识点
  5. 一页纸项目管理模板_项目管理职场必备读物!这一次全部送给你!
  6. linux log 2 1,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  7. 2009年全国数模比赛,江苏三等奖名单
  8. 163电子邮箱怎么注册申请?手机号注册电子邮箱的小技巧
  9. Golang的反射机制(The Laws of Reflection)
  10. Zookeeper全解析——Paxos作为灵魂(转)
  11. Android MVP 实践之路(理解篇)
  12. 阿里云 语音通知 语音验证码 收不到 白名单
  13. Python 分类问题研究-Fisher线性判别
  14. 计算机土木工程专业,土木工程专业需要什么样的电脑配置?
  15. sqlserver实现只查询一条数据
  16. JAVA 按姓氏分类的电话薄(界面、方法的实现和讲解)
  17. Android中notifyDataSetInvalidated()和notifyDataSetChanged()
  18. c#对话框,文件打开对话框,
  19. 从教女友写代码中学到的,教人写代码在一定程度上是硬件问题
  20. 你的Web3域名,价值究竟何在?

热门文章

  1. Python中如何使用构造方法定义类
  2. 如何进行app的兼容性测试?需要考虑哪些方面?
  3. 执行远程linux命令,linux shell 远程执行命令
  4. bat 将war文件转换成ear文件
  5. 【Hello CSS】第一章-CSS的语法与工作流
  6. Bminer 7.0.0 ETH挖矿教程(Linux 64)
  7. [Java实现] 图片择优(选择最清楚的图片)
  8. javascript 异步实现方案
  9. phpstudy多站点配置好后index of/ 列表无法出现的解决
  10. mysql删除开放用户权限