🧩 第六章 重用:OOP带来的软件重用和思想重用
📄 一句话概括

标准库和第三方库最大的差别不是功能,是谁保证它一直在——实测 json 在、requests 不在。

📝 本节和前面几节的关系

6.2 说类库是构件群,这一节分清其中哪一部分是【官方包的】。

一、一条分界线

标准库随语言一起发布,是语言规范的一部分——换了 Python 版本,json 还在、接口基本不变。 第三方库要另外装,没人做这个保证——版本一升,接口可能就动了。 实测:json/csv/re/datetime/collections/sqlite3 都在标准库里;numpy/requests 都不在。

二、为什么这条重要

因为它决定你要不要维护一份依赖清单。 标准库不用:换台机器装了 Python 就有。 第三方库要:版本得写进依赖文件,否则别人装出来的和你跑的不是一回事。 所以【先用标准库】不是保守,是少一份长期的维护成本。

三、标准库的边界

它只包【通用且稳定】的东西:文件、时间、正则、容器、网络协议、数据库接口。 带强烈业务倾向的、更新很快的,都进不了标准库——这是它的取舍。 所以标准库会显得【旧】:它宁可慢,也不愿意每年改接口。

四、实用结论

动手前先问:这件事标准库有没有?有就用,别装包。 确实没有,再挑一个活跃的第三方库,并把版本钉住。 这一条在十年尺度上的价值:标准库代码十年后还能跑,第三方库可能已经换了两代。

五、动手 Demo:标准类库是语言规范的一部分

挑八个模块,逐个查它在不在标准库里。 顺便看一眼 Python 版本和标准库总规模。

import sys
std = set(sys.stdlib_module_names)
for m in ("json", "csv", "re", "datetime", "collections",
          "sqlite3", "numpy", "requests"):
    print(m, "在" if m in std else "不在")
print(sys.version.split()[0], len(std))

实跑输出:

--------------------------------------------------------------------
标准类库是语言规范的一部分
--------------------------------------------------------------------

  **标准库和第三方库最大的差别不是功能,是【谁保证它一直在】。**实测:

  模块            在标准库里吗     要另外装吗
  --------------------------------------------
  json            在               不用
  csv             在               不用
  re              在               不用
  datetime        在               不用
  collections     在               不用
  sqlite3         在               不用
  numpy           不在             要装
  requests        不在             要装

      Python 版本                 3.13.14
      标准库模块总数              290 个

  **标准库是语言规范的一部分**:换了 Python 版本,`json` 还在、接口基本不变。
  **第三方库没人做这个保证**——版本一升,接口可能就动了,所以要把版本写进依赖文件。
  **所以先用标准库,不是保守,是省钱。**

实测:六个在标准库里、numpy 与 requests 不在;标准库共 290 个模块。 标准库跟着语言一起发布,接口基本不变;第三方库要把版本钉住,否则换机器就不是一回事。

30 秒实验

  1. 把你项目里的 import 分成两列:标准库的和第三方的。
  2. 数一数第三方那一列有几行——那就是你要长期维护的依赖面。

常见误区

  1. 以为标准库只是【自带的那些小工具】。它是语言规范的一部分。
  2. 以为第三方库更强就该优先用。它会动,标准库不动。
自测三问(点开对答案) 1. 标准库和第三方库的根本差别是什么? —— 谁保证它一直在:标准库随语言发布、接口基本不变;第三方库要另外装,版本一升接口可能就动。 2. 实测哪几个在、哪几个不在? —— json/csv/re/datetime/collections/sqlite3 在标准库;numpy/requests 不在。 3. 为什么说先用标准库不是保守? —— 因为少一份长期的维护成本:换机器就有、十年后还能跑,第三方库可能已经换了两代。

相关笔记