📄 一句话概括
重用不再是【抄一段代码】,而是从一片库海里挑几个构件拼起来——实测标准库 290 个模块起步。
📝 本节和前面几节的关系
6.6 讲框架,这一节把视野放到整个生态:能拿来用的东西有多少。
一、从抄代码到拼构件
早期复用是【把那段代码抄过来】。
现在是挑几个构件装起来:容器用 collections、格式用 json、时间用 datetime。
这个变化让【认识构件】比【会写代码】更重要——写代码还是那些行,挑对了能少写几百行。
二、实测规模
标准库 290 个模块——这已经是常驻的构件群。
再往外是第三方生态:分发包少则几十、多则上千(看项目)。
关键是【它们能组合】:同一个对象可以既是 collections 的容器元素,又是 json 的输出内容。
三、生态的代价
选择变多,判断变难:同一个功能有五个库,选错要搬一次家。 质量参差:有的十年维护、有的两年没人管。 所以【会挑】比【会用】更值钱——挑的标准见 6.8 的独立性。
四、怎么建立自己的清单
别贪多:项目里能记住名字的库,通常不超过十个。 按【一件事一个库】记账:JSON 一个、HTTP 一个、日期一个。 定期回头删:三个月没用上的依赖,多半可以删掉——依赖面越小,搬家越容易。
五、动手 Demo:世界上可重用的软件构件群
数一数这台机器上有多少可复用的构件:标准库 + 已装的分发包。 两边的数量级对比,能说明【构件群】这个词的量。
import importlib.metadata as md, sys
dists = list(md.distributions())
print(len(dists))
print(len(sys.stdlib_module_names))
实跑输出:
--------------------------------------------------------------------
世界上可重用的软件构件群
--------------------------------------------------------------------
除了标准库,还有一整个生态系统。**实测这台机器上装了多少:**
已安装的分发包数 1 个
能 import 的标准库模块 290 个
合计可复用的构件群 291 个左右
装了的包里,前几个是:
pip
(这是一台干净环境,只装了 pip;下面按标准库算规模)
**注意【构件群】这个词:**它不是一个库,是一片库,彼此还能组合。
**所以今天的重用不是【抄一段代码】,是【挑几个构件拼起来】。**
**而挑的前提是认识它们——这就是 6.2 的类库和 6.10 的路标要解决的问题。**
实测:这台机器是干净环境,只装了 1 个分发包(pip);标准库 290 个模块。 构件群的量级由标准库保底、由第三方撑开——挑的前提是认识它们,而认识的门槛在标准库这一层。
30 秒实验
- 列出你项目里的依赖清单,按【一件事一个库】重新排一遍。
- 找三个三个月没用过的依赖,评估能不能删。
常见误区
- 以为库越多越强。依赖面越大,搬家越难。
- 以为挑库看功能就行。维护状态和独立性同样重要。
自测三问(点开对答案)
1. 复用方式发生了什么变化? —— 从【抄一段代码】变成【从库海里挑几个构件拼起来】——于是认识构件比会写代码更重要。 2. 实测这台机器上有多少构件? —— 标准库 290 个模块;这台是干净环境,第三方分发包只装了 1 个(pip)。 3. 为什么要定期删依赖? —— 依赖面越小搬家越容易;三个月没用上的依赖,多半可以删。- ☐ 下一节(6.8 独立性较高的构件:组件)
相关笔记
- 独立性较高的构件:组件 — 怎么挑
- 类库是OOP的软件构件群 — 构件群的第一层
- 从编程语言演化为综合技术 — 工程化的一面
- 🧩 面向对象是怎样工作的 · 索引