Python装饰器的用法

假如我们想写一个函数,用来计算其它函数的大概执行时间。代码如下:

Python装饰器的用法_第1张图片
计算函数myfunc的运行时间

但是有个问题,以后每次调用‘myfunc’处都要改为deco(myfunc)。下面我们换一种写法:

Python装饰器的用法_第2张图片
另一种写法

之所以要换成这种写法是因为我们要引入装饰器的一种语法糖写法--”@”语法糖来精简装饰器的代码:

Python装饰器的用法_第3张图片
@装饰器写法

其实,@deco的本质就是myfunc = deco(myfunc),认清这点后看后面带参数的装饰器就很简单了。


被装饰的函数带参数的情况

前面我们讨论的都是被装饰的函数本身没有参数的情况,下面我们讨论一个被装饰函数有参数的情况:

Python装饰器的用法_第4张图片
带参数的装饰器的写法

另外,如果我们的装饰器也可以通过可变参数形式来支持多个拥有不同参数形式的函数:

Python装饰器的用法_第5张图片
可变参数的装饰器写法

装饰器的参数

到目前为止,我们装饰器中的参数都是函数体,如果我们想给装饰器添加其它数据类型的参数怎么办呢?

Python装饰器的用法_第6张图片
装饰器添加参数的写法

我们可以给装饰器外再套一层函数,就可以添加参数了

你可能感兴趣的:(Python装饰器的用法)