第5章 节省时间和内存

“不是一天天地增加要求,而是一天天地减少。去掉那些不必要的东西。”

——李小龙

我喜欢李小龙的这句名言。他是个非常聪明的人。尤其是这句话的后半部分“去掉那些不必要的东西”,对我来说就是让计算机程序变得更为优雅。不管如何,如果有更好的方法可以完成任务,不需要浪费时间或内存,为什么不用呢?

一方面,有时候,出于一些合理的原因,我们不能把代码压缩到最大限度。例如,为了一个微不足道的改进,并不值得牺牲代码的可读性或可维护性。如果一个是网页的服务时间保持在1秒之内,却需要使用难以理解的复杂代码,而另一个是服务时间是1.05秒但容易理解的清晰代码,孰优孰劣不言而喻。

另一方面,有时候让一个函数节省1毫秒也是非常合理的做法,尤其是当这个函数需要被成千上万次调用的时候。我们所节省的每毫秒在1 000次调用之后总共就节省了1秒,这对于应用程序而言是极有意义的。

出于这些考虑,本章并没有把注意力集中在提供工具把代码压缩到绝对的性能限制以及那些“不管怎样都要进行”的优化上,而是致力于编写高效、优雅并且容易理解、运行快速的代码,而且不会明显浪费资源。

在本章中,我们打算讨论下面这些主题。

  • map、zip和filter函数。
  • 解析。
  • 生成器。

我将会进行一些测试和比较,并小心翼翼地得出一些结论。记住,在不同设置或不同操作系统中,结果可能有所区别。观察下面的代码:

# squares.py
def square1(n):
    return n ** 2  # 通过乘方操作符返回结果

def square2(n):
    return n * n   # 通过乘法返回结果

这两个函数返回的都是n的平方,但哪个函数的运行速度更快呢?根据我针对它们所运行的简单基准测试结果,第2个函数似乎要稍微快一点。如果读者也是这么想的,那就对了。 ...

Get Python编程入门与实战 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.