本文始发于个人公众号:TechFlow,原创不易,求个关注
今天是Python专题的第13篇文章,上一篇文章当中我们介绍了Python装饰器的定义和基本的用法,这篇文章我们一起来学习一下Python装饰器的一些进阶使用方法。对装饰器不太熟悉,或者错过了上篇内容的小伙伴可以点击下方传送门。
之前的文章当中我们从前到后仔细推到了一下装饰器的本质和用途,也学会了它的基本用法,已经足够应付80%的场景了。但是总有20%的场景使用基本的方法解决不了,这个时候就需要我们学习更多、更全的其他用法。
比如我想要通过一个参数控制装饰器的功能,这个问题其实很常见。就拿记录时间来说,我们都知道时间可以记录成很多种格式,比如可以记成2020-05-04也可以记录成20200504,还可以记录成04/05/2020,如果是后端还会记录时间的时间戳。比如说我们现在实现了一个记录日志的装饰器,用来给我们的方法打上日志,现在我们想要控制记录日志的时候打印出来的时间格式,这个需求使用最简单的装饰器就没有办法解决了。
这个时候,如果想要解决问题,就必须引入参数,也就是说我们必须要在装饰器当中加入参数才行。但问题来了,这个参数怎么加,加在哪里呢?
定义装饰器参数
在我们介绍具体的用法之前,我们先来回顾一下装饰器的代码:
def mydec(func):
@wraps(func)
def mywrap(*args, **kw):
print('hello this is decorator1')
func(*args, **kw)
return mywrap
@mydec
def helloWorld():
print('hello, world')
这个就是我们上次讲的最简单的那种装饰器,假如说我们这个时候希望传入一个参数type,可以控制装饰器的输出结果。就像这样:
@mydec(type_='test')
def helloWorld(