以一个带参数的函数的装饰器为例子
def debug(func):
def wrapper(something): # 指定一毛一样的参数
print("[DEBUG]: enter {}()".format(func.__name__))
return func(something) #这里写func(something)好像也可以
return wrapper # 返回包装过函数
@debug
def say(something):
print("hello {}!".format(something))
say("yfc")
以现在初学的理解是相当于把被装饰的函数作为参数,重写一个包含被装饰函数内容的函数,最后返回一个新函数。
**但是有一些函数的参数我们是不知道的,这个时候可以使用*args,*kwargs来填充参数(args把参数打包成元组,**kwargs把元素打包成字典)
这个时候上面的代码就可以改为
def debug(func):
def wrapper(*args,**kwargs): # 指定一毛一样的参数
print("[DEBUG]: enter {}()".format(func.__name__))
return func(*args,**kwargs) #这里写func(*args,**kwargs)好像也可以
return wrapper # 返回包装过函数
@debug
def say(something):
print("hello {}!".format(something))
这差不多就是装饰器的初级用法了。