7.1.3 类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.2 codecs --- 编解码器注册和相关基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
7.2.1 编解码器基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
7.2.2 编码格式与 Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
7.2.3 标准编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
7.2.4 Python 专属的编码格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.2.5 encodings.idna --- 应用程序中的国际化域名 . . . . . . . . . . . . . . . . . . . . 159
7.2.6 encodings.mbcs --- Windows ANSI 代码页 . . . . . . . . . . . . . . . . . . . . . . 160
7.2.7 encodings.utf_8_sig --- 带 BOM 签名的 UTF-8 编解码器 . . . . . . . . . . . . 160
8 数据类型 161
8.1 datetime --- 基本的日期和时间类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8.1.1 感知型对象和简单型对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8.1.2 常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
8.1.3 有效的类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
8.1.4 timedelta 类对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.1.5 date 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
8.1.6 datetime 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.1.7 time 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
8.1.8 tzinfo 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
8.1.9 timezone 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
8.1.10 strftime() 和 strptime() 的行为 . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.2 zoneinfo --- IANA 时区支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
8.2.1 使用 ZoneInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
8.2.2 数据源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
8.2.3 ZoneInfo 类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
8.2.4 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
8.2.5 全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
8.2.6 异常与警告 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
8.3 calendar --- 日历相关函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
8.4 collections --- 容器数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.4.1 ChainMap 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
8.4.2 Counter 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
8.4.3 deque 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
8.4.4 defaultdict 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
8.4.5 namedtuple() 命名元组的工厂函数 . . . . . . . . . . . . . . . . . . . . . . . . . 213
8.4.6 OrderedDict 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
8.4.7 UserDict 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
8.4.8
UserList
对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
8.4.9 UserString 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
8.5 collections.abc --- 容器的抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
8.5.1 容器抽象基类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
8.6 heapq --- 堆队列算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
8.6.1 基本示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
8.6.2 优先队列实现说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
8.6.3 理论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
8.7 bisect --- 数组二分查找算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
8.7.1 搜索有序列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
8.7.2 其他示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
8.8 array --- 高效的数值数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
8.9 weakref --- 弱引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
8.9.1 弱引用对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
8.9.2 示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
8.9.3 终结器对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
8.9.4 比较终结器与 __del__() 方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
8.10 types --- 动态类型创建和内置类型名称 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8.10.1 动态类型创建 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8.10.2 标准解释器类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
iii