装饰器之基本
为什么要有装饰器? 在学习装饰器之前,一定要了解一个开放封闭原则。软件开发都应该遵循开放封闭原则。 开放封闭原则 对扩展是开放的 对修改是封闭的 为什么说要对扩展是开放的呢? 因为软件开发过程不可能一次性把所有的功能都考虑完全,肯定会有不同的新功能需要不停添加。也就是说需要我们不断地去扩展已经存在代码的功能,这是非常正常的情况。 那为什么说对修改是封闭的呢? 比如说已经上线运行的源代码,比如某个函数内部的代码是不建议直接修改的。因为函数的使用分为两个阶段:函数的定义阶段和函数的调用阶段。因为你不确定这个函数究竟在什么地方被调用了,你如果粗暴的修改了函数内部的源代码,对整个程序造成的影响是不可控的。 总结一下就是:不修改源代码,不修改调用方式,同时还要加上新功能。 什么是装饰器? 装饰器的本质 装饰器本质上可以是任意可调用对象,被装饰的对象也可以是任意可调用对象。 装饰器的功能 在不修改被装饰对象源代码以及调用方式的前提下为它添加新功能。 首先我们先来个例子: import time import random def index(): time.sleep(random.randrange(1, 5)) # 随机sleep几秒 print("欢迎访问首页。") index() 现在需求来了,我需要统计下 index 函数执行耗费的时间。 你可能会很快写出下面的代码: import