第11章 优化——一般原则与分析技术

“我们应该忘记小的效能,大约97%的情况:过早优化是万恶之源。”

——Donald Knuth

本章是关于优化的,并且提供一套一般原则和分析技术。它给出了每个开发人员应该注意的3个优化规则,并提供优化指南。最后,本章会关注如何找到瓶颈。

不管结果如何,优化需要付出一些代价。当一段代码正常工作时,如果不去管它,而不是试图花费很多成本使其更快,它可能(有时)运行的更好。进行任何类型的优化时,请注意以下几个规则。

  • 首先要能工作。
  • 从用户的角度考虑。
  • 保持代码的可读性。

一个很常见的错误是,在编写代码时就尝试优化代码。这是没有意义的,因为真正的瓶颈往往位于你从未想到过的地方。

应用程序通常由非常复杂的交互组成,并且,在真正使用它之前,我们不可能全面的了解应用程序的功能。

当然,这不是不去尝试优化一个函数或方法的原因。你应该非常细心并且尽可能降低其复杂性,避免无用的重复。但是第一个目标是使它正常工作。优化工作不应该阻碍这个首要目标。

对于行级代码,Python的哲学是用一种方法,最好是只有一种方法来做一件事。所以,只要你坚持使用Python化的语法,这些语法在第2章和第3章中提到过,你的代码应该是很好的。通常,编写较少的代码比编写更多的代码更好更快。

在到你的代码正常工作以及你准备好调优之前,不要做任何以下这些事情。

  • 开始编写全局字典以缓存函数的数据。
  • 考虑使用C语言或者混合语言(如Cython)外部化一部分代码。
  • 查找一些进行基本计算的外部库。

对于非常专业的领域,如科学计算或游戏,专业库的使用以及外部化可能从一开始就是不可避免的。另一方面,使用像NumPy这样的库可以缓解特定功能的开发,并且最终产生更简单和更快的代码。此外,如果有一个很好的库可以满足你的需求,你就没必要重新写一个。 ...

Get Python高级编程(第2版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.