>>>PyPathPython 学习站
首页›核心篇›kp-022
核心篇 · Core lv.2 核心 kp-022

标准库巡礼(batteries included)

前置知识:kp-014、kp-016

1. 一句话定义

Python 自带约 200+ 个标准库模块,覆盖数据结构、文本、日期、网络、并发、打包等——"电池齐全"是它的核心承诺:很多问题先查标准库,再想第三方。

2. 为什么重要

标准库是零依赖、随解释器分发、文档最全的部分。熟悉地图能省掉大量"为小需求引入大依赖"的决策,也是阅读第三方源码的词汇表。

3. 前置知识

kp-014(import 机制)。

4. 核心概念(按用途的地图)

用途模块一句话
数据结构增强collectionsdeque(双端队列)、Counter、defaultdict、OrderedDict
迭代工具itertools无穷序列/分组/笛卡尔积(kp-038)
函数工具functoolslru_cache、partial、reduce、total_ordering
文本与格式re string textwrap正则、模板
日期时间datetime zoneinfoaware/naive 时间、时区
结构化数据json csv sqlite3三大交换格式
系统os sys pathlib shutil subprocess路径/进程/文件批量操作
并发threading multiprocessing concurrent.futures asyncio四种并发模型(模块 03)
网络urllib.request http.server socket标准库能跑通最简单的 HTTP
工程化unittest logging argparse timeit profile测试/日志/CLI/性能
数据完整性hashlib base64 secrets uuid哈希、编码、随机(安全随机用 secrets!)
类型typing dataclasses注解与数据建模

5. 原理与机制

选型三问:① 标准库有没有?② 有第三方更专业的吗?③ 依赖值不值得引入?——脚本工具类问题标准库常够用;领域问题(HTTP 客户端、Web 框架、数据表)选成熟第三方。

python
# collections 的四件套
from collections import deque, Counter, defaultdict
q = deque(maxlen=3); q.extend([1,2,3,4])      # deque([2,3,4]) 自动丢最老
Counter("aaabbc").most_common(1)               # [('a', 3)]

# functools 两件高频
from functools import lru_cache, partial

@lru_cache(maxsize=None)
def fib(n): return n if n < 2 else fib(n-1) + fib(n-2)   # 记忆化,指数→线性

byte_order = partial(int, base=2)              # 固定参数生成新函数

6. 关键事实(模型/图示)

text
标准库分层心智:
  语言基础设施(typing/collections/itertools/functools/dataclasses)
  ── 之上的 ──
  领域胶水(json/re/datetime/pathlib/subprocess/logging/…)

7. 直观类比

标准库像精装房的基装:水电(sys/os)、门窗(json/csv)、收纳(collections)都给你装好了,拎包就能住;第三方库是定制家具——更漂亮更专业,但每件都增加搬运(依赖)成本。

8. 实例与案例

python
# 30 行以内做一个可用 HTTP 健康检查器(标准库版)
import urllib.request, time

def check(url, timeout=3):
    t0 = time.perf_counter()
    try:
        with urllib.request.urlopen(url, timeout=timeout) as r:
            return r.status, round(time.perf_counter() - t0, 3)
    except Exception as e:
        return type(e).__name__, round(time.perf_counter() - t0, 3)

9. 常见误区

  1. 手写 random 做安全用途 —— random 非密码学安全;令牌/密码用 secrets。
  2. 重复造 deque/Counter —— 列表头插 O(n)、手写字典计数,都是标准库一行的事。
  3. 以为标准库"慢所以总该换第三方" —— 它们是第三方的底层(很多 C 实现);瓶颈往往在算法与 IO(kp-034)。
  4. 不看 help() 与 pydoc —— 标准库自带离线文档:python -m pydoc -b 起本地文档服务器。

10. 自测题

  1. deque 与 list 在头插元素上的复杂度差异?
  2. lru_cache 对递归 fib 的作用原理?
  3. 生成 CSRF token 应该用 random 还是 secrets?为什么?
参考答案
  1. deque 头插 O(1)(双向链表式实现),list 头插 O(n)(整块搬移)。
  2. 以参数为键缓存已算结果,重复子问题直接命中——把 O(2^n) 削成 O(n)。
  3. secrets;random 用可预测的 Mersenne Twister,不具备密码学安全性。

11. 与其他知识点的关系

  • kp-038 itertools 专文:标准库中"最 Python"的模块。
  • kp-029~032 并发四件套:threading/multiprocessing/asyncio。
  • kp-043 自动化:subprocess 与 argparse 的主场。

12. 延伸阅读

  • Python Module of the Week(PyMOTW):https://pymotw.com/
  • 官方标准库索引:https://docs.python.org/zh-cn/3/library/