假如我们想写一个函数,用来计算其它函数的大概执行时间。代码如下:
计算函数myfunc的运行时间但是有个问题,以后每次调用‘myfunc’处都要改为deco(myfunc)。下面我们换一种写法:
另一种写法之所以要换成这种写法是因为我们要引入装饰器的一种语法糖写法--”@”语法糖来精简装饰器的代码:
@装饰器写法其实,@deco的本质就是myfunc = deco(myfunc),认清这点后看后面带参数的装饰器就很简单了。
被装饰的函数带参数的情况
前面我们讨论的都是被装饰的函数本身没有参数的情况,下面我们讨论一个被装饰函数有参数的情况:
带参数的装饰器的写法另外,如果我们的装饰器也可以通过可变参数形式来支持多个拥有不同参数形式的函数:
可变参数的装饰器写法装饰器的参数
到目前为止,我们装饰器中的参数都是函数体,如果我们想给装饰器添加其它数据类型的参数怎么办呢?
装饰器添加参数的写法我们可以给装饰器外再套一层函数,就可以添加参数了
网友评论