
python 的 `and` 运算符采用**从左到右的短路求值**:若左侧操作数为假(如 `none`、`false`、`0`、空容器等),右侧表达式将**完全不执行**,从而避免潜在异常(如对 `none` 调用方法)。
在 Python 中,布尔运算符 and 和 or 均支持短路求值(short-circuit evaluation),这是语言规范明确保证的行为(见 Python 文档:Boolean Operations)。对于 x and y:
- 首先计算 x;
- 若 x 为 falsy(例如 None, False, 0, [], {}, "" 等),则立即返回 x 的值,且 y 根本不会被求值;
- 若 x 为 truthy,则继续计算并返回 y 的值。
这意味着以下代码是安全且推荐的写法:
if foo is not None and foo.passes_the_test():
do_something()✅ 当 foo is None 为 True → foo is not None 为 False(falsy),右侧 foo.passes_the_test() 绝不会被执行,因此不会触发 AttributeError。
❌ 反之,若写成 if foo.passes_the_test() and foo is not None:,则当 foo 为 None 时,会先尝试调用 None.passes_the_test(),立即抛出 AttributeError。
⚠️ 注意事项:短路行为不仅关乎性能,更是防御性编程的关键手段,常用于空值检查、资源存在性验证等场景;不要依赖短路来“隐藏”副作用——如果 y 表达式有重要副作用(如修改状态、发请求),应显式拆分为 if 语句,以提升可读性与可维护性;and 返回的是操作数本身的值,而非强制转为 True/False。例如:"hello" and [] 返回 [],0 and "world" 返回 0。
总结:Python 的 and 严格从左到右求值,并在确定结果后立即停止。合理利用这一特性,可写出简洁、安全、符合 Pythonic 风格的条件逻辑。










