- 主要观点:要使 Python 代码快速,有多种方法,如并行、编写编译扩展等,单一方法易错过潜在加速,应从“实践”角度思考。通过一个计数字母频率的例子,展示了效率(减少浪费计算)、编译(使用编译语言及绕开编译器限制)、并行(使用多 CPU 核心)和流程(测试优化代码等)这四种实践能显著提高代码速度。
关键信息:
- 不同实践能以独特方式加速代码,涉及不同技能知识,可单独或联合应用。
- 以计数字母频率为例,先通过效率实践将代码速度提升近 2 倍,再用编译实践提升 10 倍,两者结合更快,最后用并行实践进一步提速至 330 倍。
- 软件开发依赖代码等工件,也依赖测试等流程,文中介绍了测量和测试作为流程实践的重要性。
- 不同实践效果不同且互补,如效率和编译实践在 Python 和 Rust 代码中都能提升速度。
- 注意测量的准确性,如 Python 和 Rust 字符串处理的差异可能影响测量结果,可通过传递 UTF-8 编码字节绕过 UTF-8 转换成本。
- Python 内置的
collections.Counter
类速度较快是因为使用了 C 函数实现计数,若不够快需应用编译或效率实践,如将其移植到 Rust 后再用效率实践优化。
重要细节:
- 效率实践中,通过避免在循环中重复转换字符大小写,将计数存储分开再合并,以及用列表替代
defaultdict
等方式提高代码效率。 - 编译实践中,将 Python 代码移植到 Rust 语言,利用 Rust 编译器的优化和特性提升速度,如从
HashMap
切换到Vec
或数组。 - 并行实践中,使用 Rayon 库在 Rust 中实现并行版本,利用多 CPU 核心加速代码。
- 流程实践中,强调测试优化代码的正确性,通过 profiling 找出耗时部分,测量代码运行时间等。
- 介绍了一本书《Practices of Performance》,涵盖文中提到的所有实践及机械同情实践,可学习相关知识以编写更快的计算 Python 代码。
- 效率实践中,通过避免在循环中重复转换字符大小写,将计数存储分开再合并,以及用列表替代
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。