第6章 面向对象编程、装饰器和迭代器

“类将会过时。”

——意大利俗语

关于面向对象编程(OOP)和类,足足可以写上一整本书。在本章中,我面临一个艰巨的挑战,那就是要在宽度和深度之间找到平衡。有太多的东西需要讲解,很多主题如果想要进行深入的描述,本身就需要超过一章的篇幅。因此,本章接下来所讨论的内容我认为是这些主题的基础知识的一个良好的全景视图,再加上接下来几章中将会用到的一些内容。我们可以在Python的官方文档中找到本章未能涵盖的内容。

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

  • 装饰器。
  • Python与面向对象编程。
  • 迭代器。

在第5章节省时间和内存中,我对各种表达式的执行时间进行了测量。读者可能还记得,我必须初始化一个变量表示开始时间,并在执行之后从当前时间减去这个变量的值才能计算出期间所流逝的时间。在每次测量之后,我还需要在控制台上输出结果。这个过程非常乏味。

每当我们发现自己正在重复执行某项操作时,就应该敲响警钟。我们能不能把这段代码放在一个函数中以避免重复编写代码呢?大多数情况下答案是肯定的,因此让我们观察一个例子:

# decorators/time.measure.start.py
from time import sleep, time

def f():
    sleep(.3)

def g():
    sleep(.5)

t = time()
f()
print('f took:', time() - t)  # f花费的时间:0.3001396656036377

t = time()
g()
print('g took:', time() - t)  # g花费的时间:0.5039339065551758

在上面这段代码中,我定义了两个函数,即f和g,它们不执行任何操作,只是休眠一段时间(分别是0.3秒和0.5秒)。我使用sleep函数把代码的执行暂停一段时间。注意时间的测量是相当精确的。现在,我们如何才能避免重复编写这些代码和计算呢?第一种潜在的方法可能像下面这样: ...

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.