在 Python 中妙用短路机制
作者 | 费弗里
来源 | Python大数据分析
本期我们即将学习的是:Python中短路机制的妙用
。
不同于物理学中的「短路」(Short circuit)那般危险,Python
中的短路机制非常有用,跟很多其他编程语言中的短路机制作用类似,一句话概括就是一段条件判断表达式在从左到右按顺序执行的过程中,提前确定了表达式的True/False结果,从而终止右边剩余的运算。
让我们通过几个简单的例子总结Python
中可用的几种短路机制:
X or Y
X or Y
是最常用的短路机制,我们都知道只要X
或Y
中至少有一个为True
时,整段判断表达式就为True
,譬如下面的例子中,本来1 / 0
会触发ZeroDivisionError: division by zero
错误,但因为or
左边的部分已经逻辑判断为True
,Python
的短路机制就会停止后续的执行,直接返回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']
利用短路机制在用户第一次没有满足条件时就终止后续判断,写法简洁:

本期分享结束,大家学起来~👋
往
期
回
顾
资讯
冬奥会夺金背后的杀手锏,是他
资讯
首个深度强化学习AI,控制核聚变
技术
真香,邮件分类准确识别垃圾邮件
技术
程序员元宵节的正确打开方式
分享
点收藏
点点赞
点在看
相关文章:

《Advanced PHP Programming》读书笔记
此书无中文版,但是写的极好!本来想翻译的,可是时间不允许了。 http://www.amazon.com/Advanced-PHP-Programming-George-Schlossnagle/dp/0672325616/refpd_rhf_dp_p_t_1约定:加粗字体表示章节,由于时间关系解释性的说…

cookie记录用户的浏览商品的路径
在电子商务的网站中,经常要记录用户的浏览路径,以判断用户到底对哪些商品感兴趣,或者哪些商品之间存在关联。 下面将使用cookie记录用户的浏览过的历史页面。该网站将每个页面的标题保存在该页面的$TITLE 变量中,用户每访问一次&a…

如何快速写一个违背双亲委托机制的classloader
很多情况下,不得以必须写个classloader来满足需求。例如你一个工程里你想用相同的数据库的多个版本,自己制定了一个jar包目录,没有classloader管理等等。如果是一个遵循java已经规定好的机制的classloader(双亲委托以及加载依赖类…

让我们谈谈RAID
转自:http://soft.zdnet.com.cn/techupdate/2004/0330/397707.shtml 更新时间: 2004-03-30 17:14:00 作者: 赵效民 感觉写的很好就转来了。 RAID的种类 RAID的英文全称为Redundant Array of Inexpensive(或Independent) Disks&…

Ampere 携手 Rigetti 开发混合量子经典计算机
该合作旨在为价值 160 亿美元的机器学习市场提供服务,赋能机器学习应用的发展双方将把 Ampere Altra Max 处理器和 Rigetti 量子处理单元进行优化结合,为机器学习提供整合的云平台 2022 年 2 月 21 日,安晟培半导体科技有限公司(A…

[C++] NULL VS nullptr
NULL VS nullptr 转载于:https://www.cnblogs.com/tianhangzhang/p/4945623.html

swift 的defer使得资源的分配和释放代码可以放到一起
只是一种语法和逻辑上的优化

烂泥:haproxy学习之手机规则匹配
2019独角兽企业重金招聘Python工程师标准>>> 本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb。 今天我们来介绍下有关haproxy匹配手机的一些规则配置。 一、业务需要 现在根据业务的实际需要&a…

jQuery日期选择器插件date-input
官网:http://jonathanleighton.com/projects/date-input/下载: http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js http://github.com/jonleighton/date_input/raw/master/jquery.date_input.js http://github.com/jonleighton/date_inp…

厉害了,用Python绘制动态可视化图表,并保存成gif格式
作者 | 俊欣来源 | 关于数据分析与可视化最近有粉丝问道说“是不是可以将这些动态的可视化图表保存成gif图”,小编立马就回复了说后面会写一篇相关的文章来介绍如何进行保存gif格式的文件。那么我们就开始进入主题,来谈一下Python当中的gif模块。安装相关…

facade-门面模式
解决问题 客户端调用逻辑与业务代码有效隔离,使得客户端调用只和Facade进行交互,内部的调用逻辑由Facade进行实现。此模式也可以和接口化编程结合,进一步降低客户端与业务逻辑的耦合 应用场景 它主要应用在代码结构的设计,合理组织…

淘宝李晓拴:淘宝网PHP电子商务应用
源自:http://tech.qq.com/a/20110512/000298.htm 大家好,大家知道淘宝搜索是一个典型PHP架构。在座同学不知道有多少人使用过淘宝搜索可以举手示意一下?在开始这个话题之前我们先谈一下Polyglot,多语言混合编程,淘宝有…

玩爬虫不会登陆?这个工具拿走不谢!
作者 | 周萝卜来源 | 萝卜大杂烩在日常学习当中,我们或多或少都会到网上抓取一些数据,比如豆瓣、微博等等,但是这些网站在非登录的情况只能拿到部分数据,有很多数据都是需要登陆之后才可以获取的,那么模拟登陆就成为了…

Oracle分页
先看以下两条语句的执行结果: 语句一:select rownum,empno,sal from emp order by empno; ROWNUM EMPNO SAL ---------- ---------- ---------- 1 7369 800 2 7499 1600 3 7521 …

Scala类型系统——高级类类型(higher-kinded types)
高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors)。它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它函数作为参数的函数;高级类类型则是将构造类类型作为参数类型。一个高级类…

android休眠唤醒驱动流程分析【转】
转自:http://blog.csdn.net/hanmengaidudu/article/details/11777501标准linux休眠过程:l power management notifiers are executed with PM_SUSPEND_PREPAREl tasks are frozenl target system sleep state is announced to the …

PHP使用curl_multi_add_handle并行处理
http://www.php.net/manual/zh/function.curl-multi-add-handle.php<?php// 创建一对cURL资源$ch1 curl_init();$ch2 curl_init();// 设置URL和相应的选项curl_setopt($ch1, CURLOPT_URL, "http://www.baidu.com/");curl_setopt($ch1, CURLOPT_HEADER, 0);curl…

斯坦福团队是如何构建更好用的聊天 AI 呢?
作者:Standford AI译者:Yang来源:数据实战派2019 年,凭借着 Chirpy Cardinal 机器人,斯坦福首次在 Alexa Prize Socialbot Grand Challenge 3 中赢得了第二名。本文将进一步揭示 Chirpy Cardinal 开发细节,…

使用Linux进行缓冲区溢出实验的配置记录
在基础的软件安全实验中,缓冲区溢出是一个基础而又经典的问题。最基本的缓冲区溢出即通过合理的构造输入数据,使得输入数据量超过原始缓冲区的大小,从而覆盖数据输入缓冲区之外的数据,达到诸如修改函数返回地址等目的。但随着操作…

Javascript导出Excel的方法
<SCRIPT LANGUAGE"javascript"> function method1(tableid) {//整个表格拷贝到EXCEL中 var curTbl document.getElementById(tableid); var oXL new ActiveXObject("Excel.Application"); //创建AX对象excel var oWB oXL.Workbooks.Add(); //获取…

Top 15 不起眼却有大作用的 .NET功能集
目录1. ObsoleteAttribute2. 设置默认值属性: DefaultValueAttribute3. DebuggerBrowsableAttribute4. ??运算符5. Curry 及 Partial 方法6. WeakReference7. Lazy8. BigInteger9. 非官方关键字:__arglist __reftype __makeref __…

M2 芯片终于要来了?全线换新,性能远超M1 Max
不知不觉日历已翻至 2 月下旬,掐指一算,距离苹果一年一度春季新品发布会的召开似乎已越来越近。根据年初统计的 2022 年苹果新品预测,预计今年的苹果“小春晚”将在 Mac 方面有大动作。 那么,苹果将如何“动作”,又…

Python抓取新浪新闻数据(三)
非同步载入一般在XHR下查找,但是没有发现XHR下有相关内容。 转载于:https://blog.51cto.com/2290153/2126862

不畏浮云遮望眼--离散数学和组合数学
不畏浮云遮望眼,基础很重要!离散数学是算法和数据结构的基础,而算法和数据结构又是什么的基础?不解释了。1.《离散数学及其应用》作者: (美)Kenneth H. R出版社: 机械工业出版社出版年: 2007-6页数: 804定价: 79.00元丛书: 计算机…

上班摸鱼,刚刚发现在 VScode 中可玩魂斗罗,超级玛丽
今天,再给大家介绍一款更加有意思的vscode插件——“小霸王”。 GitHub传送门:https://github.com/gamedilong/anes-repository 安装方式: 对于插件的安装,可以按照上图的操作流程。 1.打开VScode,然后点击拓展。 2.在输入框中&am…

JSP 三 :九大隐式对象
2019独角兽企业重金招聘Python工程师标准>>> ###细节 每个JSP页面在第一次被访问时,web容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet),然后按照servlet的调用方…
阿里90后工程师利用ARM硬件特性开启安卓8终端“上帝模式”
文/图 阿里安全潘多拉实验室 团控 编者按:团控,阿里安全潘多拉实验室研究人员,该实验室主要聚焦于移动安全领域,包括对iOS和Android系统安全的攻击和防御技术研究。团控的主攻方向为安卓系统级漏洞的攻防研究。在今年3月的BlackHa…

c语言模拟实现oc引用计数
#include<stdio.h> #include<stdlib.h> //在c中引入 引用计数机制 // 要解决的问题: 1,指向某块动态内存的指针有几个? // 应该让这块动态内存记录指针的数量 // 所以开辟的动态内存大小应该取多大? // …

ATT与Intel汇编语言的比较
转自 陈莉君 一书《深入分析Linux内核源码》 http://www.kerneltravel.net/kernel-book/第二章%20Linux运行的硬件基础/2.6.1.htm2.6.1 AT&T与Intel汇编语言的比较我们知道,Linux是Unix家族的一员,尽管Linux的历史不长,但与其相关的很多事…

最近,又发现了 Pandas 中三个好用的函数
作者 | luanhz来源 | 小数志导读近日,在github中查看一些他人提交的代码时,发现了Pandas中这三个函数,在特定场景中着实好用,遂成此文以作分享。程序的基本结构大体包含三种,即顺序结构、分支结构和循环结构࿰…