Python逻辑运算中的短路求值 大家好欢迎来到 Crossin的编程教室 之前我们讲过 逻辑运算的规律。观察一下真值表你会进一步发现这样两条规律如果一个条件为真那么它 or 另一个条件无论真假结果一定为真如果一个条件为假那么它 and 另一个条件无论真假结果一定为假于是编程语言在此基础上建立了一种叫做「短路求值」的执行策略即根据已知条件已经可以确定整个逻辑表达式的结果时就不再计算剩余表达式的值。Python也是如此。比如这段代码代码语言javascriptAI代码解释x 5 y 10 if x 0 or y 15: print(条件满足)程序计算出 x 0 为True之后就不会再计算 y 15的值因为无论后面是True还是False都不影响最终的结果。为了证明这一点我们把代码改写一下把后一个表达式变成函数并在其中加上一句输出以便观察代码语言javascriptAI代码解释x -5 y 10 def y小于(n): print(y小于n吗) return y n if x 0 or y小于(15): print(条件满足)输出代码语言javascriptAI代码解释条件满足运行结果中没有输出函数中的print语句可见函数没有被执行。而如果把 x 变成 -5则输出代码语言javascriptAI代码解释y小于n吗 条件满足说明函数被执行了。短路求值的作用显而易见就是避免执行不必要的代码提高程序的效率。我们在写代码的时候也可以利用这一点简化代码。比如要判断 b 是否为 a 的整数倍如果只是这么写代码语言javascriptAI代码解释a int(input()) b 9 if b % a 0: print(b是a的整数倍)那么当a为0时就会抛出除0错误因为整数不能除以0或者对0取模代码语言javascriptAI代码解释ZeroDivisionError: integer division or modulo by zero而避免这种情况不必多加一层if只需要把现有条件增加一下改为代码语言javascriptAI代码解释if a ! 0 and b % a 0:这样当a为0时条件直接短路返回False不会再执行后面的取模运算。此外对于非bool值的逻辑运算短路求值就不仅只是效率上的优化更是直接决定了运算的结果。当两个非bool值进行 and 运算时如果前值转成bool值为False就会触发 and 短路求值运算的结果就是前值而如果前值转成bool值为True不会触发短路求值结果则是后值。代码语言javascriptAI代码解释print(0 and 2) print(3 and 1)输出代码语言javascriptAI代码解释0 1or运算也是类似如果前值转成bool值为True就会触发 or 短路求值运算的结果就是前值而如果前值转成bool值为False不会触发短路求值结果则是后值。代码语言javascriptAI代码解释print(2 or 1) print(0 or 3)输出代码语言javascriptAI代码解释2 3短路求值对于多个连续的and或者多个连续的or也一样有效。多个and的结果会短路在第一个假值否则为最后一个值多个or的结果会短路在第一个真值否则为最后一个值。代码语言javascriptAI代码解释print(1 and [] and 0 and 2) print(0 or a or 3 or [])输出代码语言javascriptAI代码解释[] a最后留一个思考题代码语言javascriptAI代码解释0 and 1 or 2 and 3 or 4 and 5结果是多少为什么视频版如果本文对你有帮助欢迎点赞、评论、转发。你们的支持是我更新的动力~

相关新闻

最新新闻

Unity3D学习资源鉴别指南:从PDF陷阱到高效学习路径规划

Unity3D学习资源鉴别指南:从PDF陷阱到高效学习路径规划

1. 项目概述:一份免费PDF资源的价值与陷阱最近在社区里看到不少朋友在找Unity3D的PDF学习资料,标题里“亲测免费”这几个字确实挺吸引人的。作为一个在游戏开发行业摸爬滚打了十来年的老码农,我深知新手入门时对系统化教程的渴望,…

2026/7/11 23:17:09
pyuadk实战:10个SM3哈希与HMAC操作示例

pyuadk实战:10个SM3哈希与HMAC操作示例

pyuadk实战:10个SM3哈希与HMAC操作示例 【免费下载链接】pyuadk python wrapper of uadk 项目地址: https://gitcode.com/openeuler/pyuadk 前往项目官网免费下载:https://ar.openeuler.org/ar/ pyuadk是openEuler社区开发的UADK(Uni…

2026/7/11 23:17:09
4056充电芯片:28V高耐压+电池反接保护+热调节功能

4056充电芯片:28V高耐压+电池反接保护+热调节功能

4056充电芯片完整应用指南PW4056HH — 28V耐压、恒流恒压单节锂电池线性充电芯片一、4056充电芯片简介4056属于单节锂离子/锂聚合物电池线性充电管理芯片,以恒定电流/恒定电压(CC/CV)方式完成充电过程。在移动电源、蓝牙耳机、MP3/MP4播放器、…

2026/7/11 23:17:09
如何永久保留微信QQ撤回消息?RevokeMsgPatcher防撤回补丁完全指南

如何永久保留微信QQ撤回消息?RevokeMsgPatcher防撤回补丁完全指南

如何永久保留微信QQ撤回消息?RevokeMsgPatcher防撤回补丁完全指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https:/…

2026/7/11 23:17:09
syscontainer-tools SELinux 标签重写:容器安全加固终极指南

syscontainer-tools SELinux 标签重写:容器安全加固终极指南

syscontainer-tools SELinux 标签重写:容器安全加固终极指南 【免费下载链接】syscontainer-tools A syscontainer tool work with isulad with hook support and provides enhanced functions. 项目地址: https://gitcode.com/openeuler/syscontainer-tools …

2026/7/11 23:17:09
DMWr 与 MWr 对比评测:5大场景下的延迟与吞吐量权衡分析

DMWr 与 MWr 对比评测:5大场景下的延迟与吞吐量权衡分析

DMWr 与 MWr 深度对比:5大应用场景下的性能差异与选型指南在高速互连技术领域,PCIe协议作为现代计算架构的核心支柱,其演进直接影响着系统性能的边界。随着PCIe 6.0引入DMWr(Deferrable Memory Write)这一创新机制&…

2026/7/11 23:12:09

月新闻