讲解
布尔类型 bool 只有两个值:True 和 False(注意首字母大写,写小写会报 NameError)。比较运算和逻辑运算的结果都是布尔值,if、while 的条件也都靠它驱动。Python 里任何值都能放进条件里做「真假判定」:数字 0、空字符串 ''、空列表 []、空字典 {}、空集合 set()、None 这些是假值(falsy),其余一切——包括字符串 '0' 和 'False'——都是真值(truthy)。想知道一个值的真假,用 bool() 转一下就知道。
逻辑运算符是 and、or、not 三个英文单词(不是 &&、||、!)。and 和 or 有短路特性,并且返回的是「决定结果的那个操作数」而不一定是布尔值:a or b 在 a 为真时返回 a,否则返回 b——所以 name = input_name or '匿名' 是提供默认值的惯用写法;a and b 在 a 为假时返回 a,否则返回 b,可用于防御性调用。需要严格布尔值时包一层 bool()。
None 是 Python 表示「空」的特殊值,类型是 NoneType,全程序只有一个 None 对象。函数没写 return 时返回的就是 None;它也常用来表示「这里应该有个值,但现在没有」。判断一个值是不是 None,规范写法是 is None / is not None,而不是 == None——is 比较的是对象身份,对单例的 None 最准确,也不会被自定义的 == 行为干扰。
示例
# 布尔值与比较运算
print(True, False, 3 > 2, 'a' == 'b')
# 真假值判定:空的都是假值
things = [0, 1, '', '0', [], [0], {}, None, 'False']
for v in things:
print(f'{v!r:>10} -> {bool(v)}')
# and / or 返回操作数本身,且短路求值
print('or 兜底:', '' or '默认值', ',', '有值' or '默认值')
print('and 继续:', '通过' and '继续执行', ',', '' and '继续执行')
# 短路保护:左边为假时右边不会执行
calls = []
empty = []
empty and calls.append(empty[0]) # empty 为假,右边不执行,不会越界
print('没出事:', calls)
# None:唯一的空值单例
def do_nothing():
pass
result = do_nothing()
print('函数默认返回:', result)
print('is None 判断:', result is None, ',is not None:', result is not None)
# or 提供默认值的惯用写法
user_input = ''
display_name = user_input or '匿名用户'
print('显示名:', display_name)
常见坑
- 小写 true/false:Python 的布尔值是 True/False,首字母必须大写;true 会被当成未定义的变量名报 NameError。
- 用 or 给可能为 0 的值兜底:count = count or 10 会把合法的 0 变成 10。要区分「无」和「零」,写 if count is None: count = 10。
- 用 == None 判空:规范是 is None。== 可能被对象自定义行为干扰,is 比较身份,对单例最可靠。
- 以为空容器是「什么都没有」:[] 是假值但不等于 None。函数返回 [] 和返回 None 语义不同:前者是「查询成功但没有结果」,后者常表示「查询本身没发生」。
小结
True/False 驱动分支循环;空值皆假、其余皆真;and/or 短路且返回操作数;None 用 is 判断。下一节讲类型之间的转换。