
Python 的 and 运算符并非总是返回 True 或 False,而是遵循“短路求值+原值返回”规则:当左操作数为真值时,直接返回右操作数本身(不转为布尔);为假值时则返回左操作数。因此 13 and 9 的结果是 9,而非 True。
python 的 `and` 运算符并非总是返回 `true` 或 `false`,而是遵循“短路求值+原值返回”规则:当左操作数为真值时,直接返回右操作数本身(不转为布尔);为假值时则返回左操作数。因此 `13 and 9` 的结果是 `9`,而非 `true`。
在 Python 中,布尔运算符 and 和 or 的行为与许多其他语言(如 C、Java)有本质区别:它们不强制返回布尔类型,而是返回参与运算的实际操作数值。这是由 Python 的短路求值(short-circuit evaluation)机制决定的。
根据官方文档定义:
表达式 x and y 首先计算 x;若 x 为假值(falsy),则直接返回 x 的值;否则计算 y 并返回 y 的值。
这里的“假值”指所有被 Python 视为 False 的对象,包括 None、False、0、空序列(如 '', [], ())和空映射(如 {})等;其余均为真值(truthy)。
立即学习“Python免费学习笔记(深入)”;
因此,对于 13 and 9:
- 13 是非零整数 → 属于真值 → 继续计算右侧;
- 返回右侧操作数 9(原值,类型为 int,不是 True)。
类似地:
print(13 and 9) # 输出:9
print(0 and 42) # 输出:0(左侧为 falsy,直接返回 0)
print([] and "hello") # 输出:[](空列表为 falsy)
print("a" and [1, 2]) # 输出:[1, 2]⚠️ 注意事项:
- 不要误将 and 当作“逻辑与后转布尔”的工具。若需布尔结果,请显式转换:bool(13 and 9) → True;
- 该特性常用于默认值赋值,例如:name = user_input and user_input.strip() or "Anonymous"(注意:推荐用更清晰的 user_input.strip() if user_input else "Anonymous" 或 or 链);
- 在条件上下文中(如 if 语句),Python 自动进行真值测试,无需手动转 bool(),但赋值或函数返回时务必注意返回的是原始对象。
✅ 总结:and 是一个返回操作数本身的二元表达式,其设计兼顾逻辑语义与实用语法糖。理解“返回原值”而非“返回布尔”是掌握 Python 布尔运算的关键一步。


















