万能装饰器
函数定义版:
def set_func(func):
def call_func(*args,**kwargs):
print('---额外的功能---')
return func(*args,**kwargs)
return call_func
# 装饰器就是语法糖,对函数添加额外的功能
@set_func
# 此处相当于 set_func(test),
# 即func指向装饰前的test,call_func就是装饰后的test
def test(*args,**kwargs):
print('---函数体---')
return args, kwargs
l = [1,2,3]
dic = {'a':1,'b':2}
print(test(*l,**dic))
结果:
—额外的功能—
—函数体—
([1,2,3],{‘a’:1,’b’:2})
类定义版:
class Set_func(object):
def __init__(self,func):
print('---初始化---')
print("func's name is %s" % func.__name__)
self.__func = func
def __call__(self,*args,**kwargs):
print('---额外的功能---')
self.__func()
@Set_func
def test():
print('---函数体---')
test()
结果:
—初始化—
func’s name is test
—额外的功能—
—函数体—