标签:没有 == 性能 time 调用 例子 执行 inner 校验
装饰器本质上是一个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
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--
标签:没有 == 性能 time 调用 例子 执行 inner 校验
原文地址:https://www.cnblogs.com/sunjingjingking/p/10203962.html