Python 的 and 不是简单返回布尔结果,而是返回操作数本身:若左操作数为假值(如 0),直接返回它;否则返回右操作数。因此 13 and 9 的结果是 9,而非 True。
python 的 `and` 不是简单返回布尔结果,而是返回操作数本身:若左操作数为假值(如 0),直接返回它;否则返回右操作数。因此 `13 and 9` 的结果是 `9`,而非 `true`。
在 Python 中,and 和 or 是短路逻辑运算符,但它们的返回值并非固定为 True 或 False,而是实际参与运算的对象本身。这是 Python 区别于 C/Java 等语言的关键设计——它更注重“表达式的求值结果”而非强制类型转换。
运算规则详解
根据 Python 官方文档,x and y 的执行逻辑如下:
- 先求值 x;
- 若 x 为假值(falsy)(例如 0、None、False、空列表 []、空字符串 "" 等),则立即返回 x 的原始值,不再计算 y;
- 若 x 为真值(truthy)(即非 falsy 的任意对象,如 13、"hello"、[1]),则求值并返回 y 的原始值。
✅ 关键点:and 返回的是对象本身,不是 bool(x and y) 的结果。
实际示例验证
print(13 and 9) # 输出: 9
print(0 and 9) # 输出: 0 (左操作数为 falsy,直接返回 0)
print(-5 and []) # 输出: [] (-5 是 truthy,返回右操作数 [])
print("hello" and "world") # 输出: "world"
print([] and "fallback") # 输出: [] (空列表是 falsy)常见误区澄清
❌ 错误理解:“and 总是返回 True 或 False”。
✅ 正解:它返回操作数对象,仅在用于布尔上下文(如 if 条件)时才隐式转换为布尔值。❌ 错误假设:“所有非零数都是 True,所以 13 and 9 应该返回 True”。
✅ 正解:bool(13) is True 和 bool(9) is True 都为真,但 and 表达式本身不调用 bool();它基于 truthiness 判断流程,并保留原始值。
实用技巧与注意事项
-
链式 and 安全取值:常用于避免 AttributeError 或 KeyError:
Python 编程规范下载Python 编程规范与最佳实践。强制 PEP 8 代码风格、语法校验、单元测试执行,适用于代码编写、审查和重构。触发词:Python、代码规范、py_compile、单元测试。
立即学习“Python免费学习笔记(深入)”;
# 安全获取嵌套属性(类似 JavaScript 的 ?. 操作符) name = user and user.profile and user.profile.name # 若 user 为 None,则停止计算,name = None;不会报错
-
与布尔转换明确区分:如需布尔结果,请显式转换:
result = bool(13 and 9) # → True
-
⚠️ 注意副作用:因短路特性,右侧表达式可能不被执行:
def side_effect(): print("called!") return 42 0 and side_effect() # 输出:无(未调用函数) 1 and side_effect() # 输出:"called!",然后返回 42
掌握这一机制,不仅能正确预测 13 and 9 返回 9,更能写出更 Pythonic、安全且高效的逻辑表达式。

















