来源https://root-11.codeberg.page/intro-book-python/使用实体-组件-系统和基于存在性处理进行Python编程简介作者:Bjorn Madsen更新日期:2026-05-09在线阅读:Codeberg · GitHub Pages克隆源码:git clone https://codeberg.org/root-11/intro-book-python.git·git clone https://github.com/root-11/intro-book-python.git问题反馈:Codeberg · GitHub一个课堂:理解、建模、求解、验证、改进本书从数据导向设计、实体-组件-系统ECS和基于存在性处理EBP的第一性原理出发教授编程。它仅使用Python和numpy作为编程语言。本书围绕四十三个概念有向无环图及其规范表述词汇表进行结构组织。章节短小精悍——两到三页的散文叙述随后是四到十二个逐步深入的练习。概念仅在构建之后才被命名每个章节通过可运行的代码赢得其词汇而非相反。全书的主线是一个小型生态系统模拟器分阶段构建从一百个游荡的生物逐步扩展到一亿个流式传输的生物。模拟器的规范位于code/sim/SPEC。这是本书的Python版本——与同一本书的Rust版本是姊妹卷。相同的四十四个章节相同的DAG相同的模拟器。不同之处在于每章对Python默认行为将读者推向何处的评论以及为什么ECS和EBP即使在使用慢速语言时也能胜出。该版本的核心论点是ECS和EBP优于面向对象编程因为它们处理更高效操作集中在数组上扩展更清晰数据导向组合优于类图并且内存占用更小类型化列优于对象图。支撑这个版本的是证据。每一个重要的论断都附有一个测量结果读者可以在自己的笔记本电脑上在一分钟内重现。这些示例位于code/measurement/目录下通过uv run code/measurement/file.py运行。本书仍在编写中。章节顺序由DAG决定阅读顺序可以是线性的从前到后也可以按照交叉链接随意跳转。本书的读者对象你上周用过Python。你写了一个类将实例放入列表中然后遍历它们。你的代码能运行但比预期的慢并且你开始怀疑标准的惯用法是否是瓶颈。本书适合那些想找出答案的人。本书的前提是这些惯用法确实是瓶颈——并且本书教授的架构正是Python当它真正快的时候所擅长的。许多在线书籍包含一个可以在浏览器中运行代码的游乐场。本书故意不包含这种功能测量只有当它们来自你自己的硬件时才有意义。背景知识你应该熟悉高中代数和命令行——运行命令、切换目录、看到错误信息时不惊慌。有一台能上网的笔记本电脑就足够了本书使用Python 3.11、numpy和uv进行环境管理。其他一切都使用标准库。你不需要事先具备数值计算、并行计算或游戏开发的专业知识。本书将numpy和模拟器一起教授语言是工具而非主题。初体验在命名任何词汇之前这里用十五行Python代码展示ECS世界的样子。一百个生物每个都有位置和速度模拟时间运行三十个滴答。没有类没有实例没有方法调用——四个步调一致的numpy数组索引以及一个函数每滴答的更新函数它一次性更新所有生物。importnumpyasnp n100xnp.arange(n,dtypenp.float32)*0.1ynp.sin(np.arange(n,dtypenp.float32))vx((np.arange(n)*7)%11).astype(np.float32)*0.01-0.05vy((np.arange(n)*13)%7).astype(np.float32)*0.01-0.03fortickinrange(30):xvx yvyiftick%100:print(ftick{tick}: creature 17 at ({x[17]:.2f},{y[17]:.2f}))在本地运行它。会打印三行然后脚本停止。这就是本书其余部分将要扩展的完整形态表四个数组、一个滴答外层循环、一个系统每滴答的更新函数。后续的所有内容都是让这种相同的形态能够承载一亿个生物而不崩溃的规范。熟悉的Python形态——一个Creature类、一个实例列表、一个step()方法——在这种规模下也能工作。但在百万级别时它就会停止工作原因在第2节每个生物的内存消耗增加一个数量级每滴答的速度减慢一个数量级。本书教授的是能够经受住下一个量级扩展的布局。运行代码Python没有Rust Playground的等效物——没有浏览器托管的运行器能够重现章节中引用的数字。本书中的每个测量和示例都在本地运行使用uv来管理Python工具链和环境。要运行任何代码你需要克隆本书的仓库gitclone https://codeberg.org/root-11/intro-book-python.gitcdintro-book-python uv run code/measurement/cache_cliffs.py每个code/measurement/name.py文件是一个练习组可以独立运行。它打印出的数字是属于你的——它们来自你的硬件。练习会问“你的机器运行这个有多快”而这个问题只有在本地才有真实的答案。从模拟器章节第11节及以后开始练习不再是独立的脚本。它们构建主线一个Python程序从一百个游荡的生物增长到一亿个流式传输的生物。该程序在多次运行之间保持状态这正是uv run和项目布局为你带来的好处。配套版本如果你已经熟悉Python并希望获得编译时强制执行本书通过约定教授的规范那么Rust版本涵盖了相同的四十四个章节使用Rust语言实现。架构相同语言不同。许多读者发现观察借用检查器在Rust中强制执行本书要求作为规范的约束也是一种有用的反向校准。