Python 的 and/or 短路求值是语义必需而非性能优化:and 遇 falsy 值即返左、否则返右;or 遇 truthy 值即返左、否则返右;二者均返回原操作数,且严格从左到右求值,结果确定后立即停止。

and 和 or 的短路求值不是“为了性能优化而加的特性”,而是 Python 布尔逻辑语义的自然结果——只要能确定整个表达式的真假,后续部分就**没有必要求值**,语言规范强制要求跳过。
短路是语义必需,不是可选优化
Python 中 and 表达式整体为真,当且仅当所有操作数都为真;or 整体为真,当且仅当至少一个操作数为真。这种定义决定了:一旦左侧已足以否定或确认结果,右侧就失去参与意义。
-
0 and risky_operation()→0,因为0是 falsy,整个and必为 falsy,risky_operation()根本不会执行 -
"ok" or dangerous_call()→"ok",因为"ok"是 truthy,整个or必为 truthy,dangerous_call()被跳过
短路直接决定副作用是否发生
函数调用、IO、赋值等有副作用的操作放在 and/or 右侧时,其执行与否完全取决于左侧值的真假性——这不是“语法糖”,而是控制流的一部分。
-
user and user.save():只有user为 truthy 时才保存,避免对None调用方法 -
config.get("timeout") or 30:若 key 不存在或值为None,返回30;但如果合法配置允许0(表示无超时),这个写法就会误 fallback -
print("A") and print("B"):只输出A,因为print()返回None(falsy),print("B")不执行
and/or 混合时优先级容易误判
and 优先级高于 or,但求值仍是严格从左到右——这导致混合表达式的行为常被读错。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
-
False or True and False等价于False or (True and False)→ 先算True and False得False,再算False or False→ 结果False -
False or True and []同样先算True and []→ 返回[](falsy),最终结果是[],不是True - 想表达 “(False or True) and []”,必须显式加括号,否则逻辑被优先级改写
返回原值而非布尔值才是关键差异
短路行为之所以影响深远,根本原因在于:and 和 or **返回操作数本身**,不是 True 或 False。这意味着:
立即学习“Python免费学习笔记(深入)”;
-
[] or [1]返回[1],不是True -
0 and "hello"返回0,不是False - 你不能假设
a or b的结果是布尔值——它可能是数字、列表、字符串、None,甚至自定义对象
0、False、"")会无声地破坏 fallback 逻辑。

















