
Python 的 and 不是简单返回 True/False,而是返回实际操作数:若左操作数为假值(如 0、None、空容器等),则返回它;否则返回右操作数。
python 的 `and` 不是简单返回 `true`/`false`,而是返回实际操作数:若左操作数为假值(如 `0`、`none`、空容器等),则返回它;否则返回右操作数。
在 Python 中,布尔运算符 and 和 or 的行为与许多其他编程语言不同——它们不强制返回布尔值,而是遵循“短路求值 + 返回原值”的语义。这意味着表达式 13 and 9 的结果既不是 True,也不是 1,而是 9。
? 运作机制:短路求值 + 值传递
根据 Python 官方文档,x and y 的执行逻辑如下:
- 先计算 x;
- 若 x 为假值(falsy)(例如 0、False、None、[]、{}、'' 等),则立即返回 x 的原始值,不再计算 y;
- 若 x 为真值(truthy)(即非 falsy 的任意对象,如非零数字、非空字符串、列表等),则计算 y,并返回 y 的原始值。
因此:
>>> 13 and 9 9 >>> 0 and 9 0 >>> [] and "hello" [] >>> "Python" and [1, 2, 3] [1, 2, 3]
✅ 实际应用示例
这种行为常用于简洁的默认值赋值或条件链式判断:
立即学习“Python免费学习笔记(深入)”;
# 获取用户输入,若为空则使用默认用户名
username = input("Enter name: ") or "guest"
# 若 input() 返回空字符串(falsy),则取 "guest"
# 安全获取嵌套字典的值(避免 KeyError)
config = {"database": {"host": "localhost"}}
host = config.get("database") and config["database"].get("host")
# 若 config.get("database") 为 None,则整个表达式短路返回 None,不会触发 KeyError⚠️ 注意事项
- ❌ 不要误以为 and 总是返回布尔结果:bool(13 and 9) 是 True,但 13 and 9 is True 为 False(因为返回的是整数 9,而非 True)。
- ✅ 判断真假请显式使用 bool() 或直接用于 if 条件中(Python 会自动调用 __bool__ 或 __len__)。
- ? and 与 or 可组合使用,但需注意结合性(and 优先级高于 or),复杂逻辑建议加括号提升可读性:
result = (a and b) or c # 明确意图:先求 a and b,再与 c or
? 总结
and 是一个返回操作数本身的逻辑运算符,其核心价值在于简洁、安全地进行存在性检查与默认值回退。理解它“返回原值而非布尔”的本质,是写出地道、健壮 Python 代码的关键一步。记住口诀:“假则返左,真则返右”。


















