在 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']
利用短路机制在用户第一次没有满足条件时就终止后续判断,写法简洁:

本期分享结束,大家学起来~ 关注公众号:拾黑(shiheibook)了解更多 [广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 中法元首相会都江堰 7904738
- 2 中方不接受日方所谓交涉 已当场驳回 7808835
- 3 大闸蟹为何会在欧美泛滥成灾 7712786
- 4 国际机构看中国经济 关键词亮了 7617846
- 5 男子欠近5000元房费 酒店倒贴都不搬 7523058
- 6 日方军机滋扰擅闯或被视为训练靶标 7426045
- 7 长沙一男子要取现20万 银行紧急报警 7331820
- 8 罪犯被判死缓破口大骂被害人一家 7238994
- 9 日军机滋扰辽宁舰训练 中方严正交涉 7135709
- 10 千吨级“巨无霸”就位 7047486







AI100
