Python布尔短路规则_and与or执行顺序

5次阅读

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

Python布尔短路规则_and与or执行顺序

Python中andor的短路行为,取决于操作数的真假值,而非固定“先算哪个”,而是按**从左到右顺序逐个求值,一有确定结果就停止**。

and 的短路逻辑:遇假即停,返回第一个假值

and表达式要求所有操作数都为真才整体为真。Python从左往右检查,一旦遇到**第一个“假值”(如 False0None、空字符串、空列表等)**,立刻返回该值,不再计算后续部分。

  • True and "hello" and [] and "world" → 返回 [](空列表是假值,第三个操作数,后续"world"不执行)
  • print("A") and print("B") and print("C") → 只输出 AB,因为 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 FalseFalse,再算 False or False → 结果 False
  • 想强制改变顺序,必须加括号:(False or True) and FalseTrue and FalseFalse

实际应用中的常见写法

短路特性常被用于安全取值、默认值设置或条件执行:

  • 提供默认值:name = user_input or "anonymous"(输入为空时用默认名)
  • 避免属性错误:obj and obj.name(先确认obj存在再取name
  • 条件执行副作用:condition and do_something()(仅当 condition 为真时调用函数)
text=ZqhQzanResources