装饰器本质就是一个函数嵌套的高阶函数。 用@装饰器的函数名 写在被调用的函数声明上面一行进行语法糖调用。 code1:简单版本装饰器
def cal_func(func):
def add_args(*args,**kwargs):
print("i'm caller")
func(*args,**kwargs)
return add_args
@cal_func
def test1():
print("hehe,我是test1")
test1()
CODE2:语法糖带参数
def warraper(navi) :
print(navi)
def cal_func(func):
def add_args(*args,**kwargs):
print("i'm caller")
func(*args,**kwargs)
return add_args
return cal_func #这里不返回,test2报错
@warraper(navi="hahahaha")
def test1():
print("hehe,我是test1")
#如果这里不写navi,会报错
@warraper(navi="hehehehe")
def test2(name,age):
print("hehe,我是%s,%d"%(name,age))
test1()
test2("ne",15)