python中and和or按从左到右顺序短路求值:and遇假即返第一个假值,or遇真即返第一个真值;and优先级高于or,混合时等价于a or (b and c)。

Python中and和or的短路行为,取决于操作数的真假值,而非固定“先算哪个”,而是按**从左到右顺序逐个求值,一有确定结果就停止**。
and 的短路逻辑:遇假即停,返回第一个假值
and表达式要求所有操作数都为真才整体为真。Python从左往右检查,一旦遇到**第一个“假值”(如 False、0、None、空字符串、空列表等)**,立刻返回该值,不再计算后续部分。
-
True and "hello" and [] and "world"→ 返回[](空列表是假值,第三个操作数,后续"world"不执行) -
print("A") and print("B") and print("C")→ 只输出A和B,因为print()返回None(假值),第三个print("C")根本不会运行
or 的短路逻辑:遇真即停,返回第一个真值
or表达式只要有一个操作数为真,整体就为真。Python同样从左往右,一旦遇到**第一个“真值”(非零数字、非空容器、非None对象等)**,立即返回它,跳过后面所有表达式。
-
0 or [] or "ok" or [1,2]→ 返回"ok"(第三个操作数是真值,第四个不执行) -
False or (5/0) or 42→ 报错ZeroDivisionError,因为第二个操作数(5/0)被求值了;但若写成True or (5/0) or 42,则只返回True,后面完全不执行
and 和 or 混合时,按优先级和结合性处理
and 优先级高于 or,且都左结合。所以 a or b and c 等价于 a or (b and c),不是 (a or b) and c。
立即学习“Python免费学习笔记(深入)”;
-
False or True and False→ 先算True and False得False,再算False or False→ 结果False - 想强制改变顺序,必须加括号:
(False or True) and False→True and False→False
实际应用中的常见写法
短路特性常被用于安全取值、默认值设置或条件执行:
- 提供默认值:
name = user_input or "anonymous"(输入为空时用默认名) - 避免属性错误:
obj and obj.name(先确认obj存在再取name) - 条件执行副作用:
condition and do_something()(仅当 condition 为真时调用函数)










