装饰器(Decorators)无参装饰器带参装饰器装饰器(Decorators)
装饰器,是修改其他函数的功能的函数。
无参装饰器
假设现在线上有个函数
运行结果是:
现在领导要求,下个版本开始,需要先进行登录验证,获取到数据后,还要需要记录用户的操作日志。
在python中,有个神奇的功能,可以在不修改原函数的前提下,扩展修改原函数的功能。如下:
运行结果是:
通过运行结果,已经实现了在获取数据前先进行了登录,获取数据后,又进行的日志打印。
再看一下修改情况,发现原来的函数并没有修改,只是额外添加了一个函数。
分析函数:
wrapper函数接收一个函数对象作为入参
wrapper函数在内部定义了一个内部函数
(在inner函数中,先处理了登录,然后调用了传入的`main_func`函数,最后处理日志打印)。
然后wrapper函数返回一个内部函数。
在调用 的方式上,做了如下修改
先将get_data函数传递到wrapper函数中,获得内部函数inner,然后将inner赋值会给,如此一来,执行,便等同于执行
在python中,有种语法,叫装饰器,上面示例中,便可称为“装饰器”。我们可以用更加优雅的方式来调用装饰器,并且无需修改调用方式。
调用方式无需调整,原函数无需调整,只需添加一个装饰器,然后再原函数定义前,添加需要使用的装饰器即可。
带参装饰器
上面的例子,被修饰的函数没有带参数,装饰器本身也没有带参数。下面修改一下,让它们都可以带上参数。
运行结果如:
分析代码执行流程如下:
执行时:
先执行, 返回outer函数
执行,返回inner函数
执行
领取专属 10元无门槛券
私享最新 技术干货