在不改变原函数及函数调用方式的情况下添加函数功能,我们引入了装饰器,装饰器是对函数进行修饰,它接收的参数是一个函数,那么怎样可以让装饰器可以接收除函数以外的参数呢?通过以下示例来了解装饰器。
一、装饰器接收参数
import time
import functools
def log_kind(kind): #传参数的装饰器
def add_log(fun): #装饰函数的装饰器
@functools.wraps(fun)
def wrapper(*args,**kwargs): #装饰函数
start_time = time.time()
res = fun(*args,**kwargs)
end_time = time.time()
print('<%s>[%s] 函数名: %s, 运行时间: %.6f, 运行返回值结果: %d'
%(kind,time.ctime(),fun.__name__,end_time - start_time,res))
return res
return wrapper
return add_log
@log_kind('debug') #时间塘调用装饰器
def add(x,y):
time.sleep(1)
return x + y
add(1,2) #调用函数add