示例 7-19 演示了叠放装饰器的方式:@lru_cache 应用到 @clock 装饰 fibonacci 得到的结果上。在示例 7-21 中,模块中最后一个函数应用了两个 @htmlize.register 装饰器。

@d1@d2 两个装饰器按顺序应用到 f 函数上,作用相当于 f = d1(d2(f))

也就是说,下述代码:

@d1
@d2
def f():
    print('f')

等同于:

def f():
    print('f')

f = d1(d2(f))

除了叠放装饰器之外,本章还用到了几个接受参数的装饰器,例如 @lru_cache() 和示例 7-21 中 @singledispatch 生成的 htmlize.register(«type»)。下一节说明如何构建接受参数的装饰器。