Skip to content

Python 布尔类型 ​

程序经常需要记录只有两种结果的状态。例如:用户是否登录、课程是否完成、输入内容是否为空。

Python 使用布尔类型 bool 表示这类状态,它只有两个值:

  • True:条件成立,也叫真
  • False:条件不成立,也叫假

Python 布尔二元状态与程序决策分流图

先看一个登录状态:

python
is_logged_in = True

if is_logged_in:
    print("已经登录")
else:
    print("请先登录")

运行结果:

text
已经登录

当 is_logged_in 是 True 时,程序输出“已经登录”;改成 False 后,程序会执行另一条分支。if 的完整用法会在流程控制章节中讲解,这里先观察布尔值怎样影响程序的选择。

True 与 False ​

布尔值可以像数字和字符串一样保存到变量中:

python
is_logged_in = True
is_course_finished = False

print(is_logged_in)
print(is_course_finished)
print(type(is_logged_in))

运行结果:

text
True
False
<class 'bool'>

布尔变量通常用能够表达判断含义的名字,例如:

  • is_logged_in:是否已经登录
  • has_permission:是否拥有权限
  • can_submit:是否可以提交

这样的变量名读起来像一个可以回答“是”或“否”的问题,更容易看出它保存的是布尔值。

注意大小写

True 和 False 的首字母必须大写。下面的写法会被 Python 当成变量名,并出现 NameError:

python
is_logged_in = true
is_course_finished = false

正确写法是:

python
is_logged_in = True
is_course_finished = False

比较运算也会产生布尔值:

python
score = 85
is_passed = score >= 60

print(is_passed)
print(type(is_passed))

运行结果:

text
True
<class 'bool'>

score >= 60 用来判断成绩是否大于或等于 60,结果会赋值给 is_passed。比较运算符会在下一节集中讲解。

True 和 False 两种布尔状态以及比较结果的说明图

bool() 与真假转换 ​

使用 bool() 可以查看一个值会被当成 True 还是 False:

python
print(bool(None))
print(bool(0))
print(bool(1))
print(bool(""))
print(bool("Python"))
print(bool([]))
print(bool([1, 2, 3]))

运行结果:

text
False
False
True
False
True
False
True

当前阶段先记住下面的规律:

  • None 会被转换为 False
  • 数字 0 会被转换为 False
  • 空字符串 "" 和空列表 [] 会被转换为 False
  • 非零数字、非空字符串和非空列表通常会被转换为 True

函数和普通对象通常也会被当成 True。这部分暂时不需要展开,学习函数和类以后再回来看会更容易理解。

非空字符串不代表内容正确

bool() 判断字符串时,只关心它是不是空字符串,不会理解文字表达的含义:

python
print(bool("False"))
print(bool("0"))
print(bool(" "))

运行结果:

text
True
True
True

"False"、"0" 和只包含空格的字符串都有内容,所以结果都是 True。

bool 函数真假转换规则对比图

在条件判断中使用布尔值 ​

布尔值最常见的用途是控制程序是否执行某段代码。

例如,判断用户有没有输入姓名:

python
username = input("请输入用户名:")

if username:
    print("用户名输入成功")
else:
    print("用户名不能为空")

这里的 if username: 会把 username 按照 bool(username) 的规则判断:

  • 输入了内容,非空字符串会被当成 True
  • 直接按回车,空字符串会被当成 False

因此,不需要写成下面这种形式:

python
if username != "":
    print("用户名输入成功")

两种写法都能判断空字符串,但 if username: 更简洁,也更符合 Python 中的常见写法。

如果用户只输入空格,字符串仍然不是空的。上一节学过的 strip() 可以先去掉字符串两端的空白:

python
username = input("请输入用户名:").strip()

if username:
    print("用户名输入成功")
else:
    print("用户名不能为空")

现在,无论直接按回车,还是只输入空格,都会进入“用户名不能为空”的分支。

使用 if username 判断用户名是否为空的流程图

布尔值与数字 ​

在 Python 中,bool 是 int 的子类。因此,True 和 1 相等,False 和 0 相等:

python
print(True == 1)
print(False == 0)
print(isinstance(True, int))

运行结果:

text
True
True
True

这个关系主要用于理解 Python 的类型设计。实际编程时,布尔值应该用来表达“成立或不成立”,不要为了省事把它和数字混在一起,否则代码会变得难以理解。

小结 ​

本节课最核心的是掌握 4 件事:

  1. 布尔类型 bool 只有 True 和 False 两个值
  2. 0、None 和空内容通常会被当成 False
  3. 非零数字和非空内容通常会被当成 True
  4. 布尔值可以直接用于 if 判断,控制程序执行不同分支

下一节学习运算符后,我们就可以通过比较和逻辑运算得到更多布尔结果。