飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 第1章 Python简介

    • Python是什么
    • 安装与运行
    • 交互式解释器
    • 注释与编码规范
  • 第2章 变量与数据类型

    • 变量与对象
    • 整数 int
    • 浮点数 float
    • 复数 complex
    • 布尔值 bool
    • 字符串 str
    • 空值 None
    • 类型转换
  • 第3章 运算符与表达式

    • 算术运算符
    • 比较运算符
    • 赋值运算符
    • 逻辑运算符
    • 位运算符
    • 身份与成员运算符
    • 海象运算符
    • 运算符优先级
  • 第4章 流程控制

    • if 语句
    • if-else 语句
    • if-elif-else 语句
    • match-case 语句
    • 条件表达式(三元运算符)
    • while 循环
    • for 循环
    • range 函数
    • break 与 continue
    • 循环的 else 子句
    • pass 语句
  • 第5章 数据结构

    • 列表创建与索引
    • 列表方法
    • 列表推导式
    • 元组
    • 序列解包
    • 集合
    • 字典创建与访问
    • 字典方法
    • 字典推导式
    • range 对象
  • 第6章 函数

    • 定义函数
    • 位置参数与关键字参数
    • 默认参数
    • 可变参数
    • 解包实参
    • 函数返回值
    • lambda 表达式
    • 文档字符串与注解
    • 作用域与命名空间
    • global 与 nonlocal
  • 第7章 模块与包

    • 模块导入
    • 模块搜索路径
    • 包与相对导入
    • 标准库概览
  • 第8章 文件与输入输出

    • 文件读写
    • 上下文管理器
    • 字符串格式化
    • JSON 与 CSV
  • 第9章 面向对象

    • 类与对象
    • 方法
    • 实例变量与类变量
    • 私有变量
    • 继承
    • 多重继承
    • 魔术方法
    • 属性装饰器
    • 数据类 dataclass
  • 第10章 异常处理

    • 语法错误与异常
    • try-except
    • 异常链与 raise
    • 清理操作
    • 自定义异常
  • 第11章 迭代器与生成器

    • 迭代器协议
    • 生成器
    • 生成器表达式
    • 迭代工具
  • 第12章 高级特性

    • 装饰器
    • 函数式编程
  • 第13章 工程实践

    • 测试与调试
    • 代码质量
    • 虚拟环境

布尔值 bool

Python 的 bool 类型只有两个值:True 和 False。它继承自 int,在需要数值的上下文中分别表现为 1 和 0,但本质上是独立的逻辑类型。

True 与 False

True 和 False 是内置常量,首字母必须大写:

is_valid = True
is_empty = False

# 小写会报错
# true = 1        # NameError: name 'true' is not defined

bool 是 int 的子类,这带来一些有趣的性质:

print(isinstance(True, int))   # True
print(True + True)             # 2
print(True * 10)               # 10
print(False * 100)             # 0

但 True 和 1 并非同一对象:

print(True == 1)               # True,值相等
print(True is 1)               # False,身份不同

bool 类型只有 True 和 False 两个实例,因此 is 运算符判断布尔值是安全且推荐的做法。

真值判断

Python 中任何对象都可以被判断为真或假。以下值在布尔上下文中为 False:

  • None
  • False
  • 数值零:0、0.0、0j
  • 空序列和空集合:""、[]、()、{}、set()、range(0)

其余所有对象均为 True:

print(bool(0))         # False
print(bool(0.0))       # False
print(bool(""))        # False
print(bool([]))        # False

print(bool(1))         # True
print(bool(-1))        # True,非零即真
print(bool(" "))       # True,非空字符串
print(bool([0]))       # True,非空列表

注意区分"值为零"和"为空容器":

print(bool(0))         # False
print(bool([0]))       # True,列表非空
print(bool("0"))       # True,字符串非空

逻辑运算

Python 提供三个逻辑运算符:and、or、not。

not:对操作数进行真值判断后取反,结果一定是 bool:

print(not True)        # False
print(not 0)           # True
print(not "hello")     # False
print(not [])          # True

and 和 or:执行短路求值,返回决定结果的操作数本身,不一定是 bool:

# and:第一个为假则返回第一个,否则返回第二个
print(3 and 5)         # 5,两者皆真,返回后者
print(0 and 5)         # 0,前者为假,短路返回
print("a" and "b")     # "b"
print("" and "b")      # "",空字符串为假

# or:第一个为真则返回第一个,否则返回第二个
print(3 or 5)          # 3,前者为真,短路返回
print(0 or 5)          # 5,前者为假,返回后者
print("a" or "b")      # "a"
print("" or "b")       # "b"

短路求值意味着如果第一个操作数已能决定结果,第二个操作数不会被求值:

def side_effect():
    print("被调用了")
    return True

print(False and side_effect())  # 不会打印"被调用了"
print(True and side_effect())   # 会打印"被调用了"

常见用法模式

设置默认值:

name = user_input or "匿名"
# 如果 user_input 为空字符串(假),则使用 "匿名"

条件执行:

# 不推荐:与 True 比较是多余的
if is_ready == True:
    pass

# 推荐:直接判断
if is_ready:
    pass

# 如果需要明确判断布尔值
if is_ready is True:
    pass

链式比较:Python 支持数学风格的链式比较:

x = 5
print(1 < x < 10)      # True,等价于 1 < x and x < 10

陷阱与边界

== 与 is 的混淆:

# 错误:可能误判
if x == True:          # 当 x 为 1 时也为 True
    pass

# 正确:严格判断布尔值
if x is True:
    pass

# 更常见:判断真值
if x:
    pass

布尔值参与算术:虽然合法,但可读性差:

# 不推荐
result = flag * 10

# 推荐
result = 10 if flag else 0

any() 和 all():内置函数简化多对象判断:

print(all([1, 2, 3]))      # True
print(all([1, 0, 3]))      # False
print(any([0, "", 3]))     # True
print(all([]))             # True
print(any([]))             # False

理解布尔类型和真值判断,是写出简洁 Python 代码的基础。核心原则:用 if x: 判断真值,用 is True 严格判断布尔值,利用短路求值简化逻辑。

上一页
复数 complex
下一页
字符串 str