装饰器
Posted sunjingjingking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。
装饰器(decorator)
装饰器本质上是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
应用场景:插入日志,性能测试,事务处理,缓存,权限校验
作用:为了已经存在的函数或者对象添加额外的功能
例子1: def w1(func): def inner(): #可以加if判断 print("---验证---") func() return inner #f1=w1(f1) @w1 def f1(): print(‘f1‘) #调用 f1()
双层装饰器
装饰是从下装到上,调用是从上到下。
def w1(func): print("--正在装饰1--") def inner(): print("--正在验证1--") func() return inner def w2(func): print("--正在装饰2--") def inner(): print("--正在验证2--") func() return inner @w1 @w2 def f1(): print("--f1--") #装饰倒着装,调用是从上到下。 f1() ###执行结果### --正在装饰2-- --正在装饰1-- --正在验证1-- --正在验证2-- --f1--
装饰器不定长参数
def timefun(func):
#接受函数的参数
def wrappedfunc(*args, **kwargs):
print("fun_name is %s"%(func.__name__))
func(*args, **kwargs)
return wrappedfunc
@timefun
def foo(a, b, c):
print(a + b + c)
foo(1,2,3)
>>>fun_name is foo
>>>6
装饰器return
def func(fun):
def func_in(*args,**kwargs):
#ret保存return 返回值,如果没有返回值为None
ret = fun(*args,**kwargs)
return ret
return func_in
@func
def test(args):
print("---%s--"%(args))
return "haha"
print(test(1))
装饰器带参数
def func_arg(arg):
def fun(fun):
def func():
print("--记录日志--%s"%(arg))
if arg=="heihei":
fun()
else:
pass
return func
return fun
#1.先执行func_arg函数,return 结果是这个fun函数
#等于使用@fun 对test进行装饰
@func_arg("heihei")
def test():
print("--test--")
test()
--记录日志--heihei
--test--
以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章