博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰器
阅读量:5044 次
发布时间:2019-06-12

本文共 1994 字,大约阅读时间需要 6 分钟。

装饰器(decorator)

  • 装饰器本质上是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

  • 应用场景:插入日志,性能测试,事务处理,缓存,权限校验

  • 作用:为了已经存在的函数或者对象添加额外的功能

    例子1:def w1(func):  def inner():      #可以加if判断      print("---验证---")      func()  return inner#f1=w1(f1)@w1def f1():  print('f1')#调用f1()

双层装饰器

  • 装饰是从下装到上,调用是从上到下。

    def w1(func):  print("--正在装饰1--")  def inner():      print("--正在验证1--")      func()  return innerdef w2(func):  print("--正在装饰2--")  def inner():      print("--正在验证2--")      func()  return inner@w1@w2def f1():  print("--f1--")#装饰倒着装,调用是从上到下。f1()###执行结果###--正在装饰2----正在装饰1----正在验证1----正在验证2----f1--

装饰器不定长参数

from time import ctime, sleepdef timefun(func):    #给函数传参数    def wrappedfunc(*args,**kw):        print("%s called at %s"%(func.__name__, ctime()))        func(*args,*kw)    return wrappedfunc@timefundef foo(a,b,c):    print(a+b+c)foo(1,2,3)foo called at Tue Jan  1 17:16:15 20196

装饰器return

def func(fun):    def func_in(*args,**kwargs):        #ret保存return 返回值,如果没有返回值为None        ret = fun(*args,**kwargs)        return ret    return func_in@funcdef 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--

类装饰器

class test(object):    #重写这个call方法,让类加上()就可以被调用。    def __call__(self):            print("--test--")t = test()t()--打印结果----test--######类装饰器class Test(object):    def __init__(self,func):        print("---初始化--")        print("func name is %s"%(func.__name__))        self.__func = func    def __call__(self):        print("--装饰器中的功能---")        self.__func()@Testdef test():    print("---test--")test()--打印结果-----初始化--func name is test--装饰器中的功能------test--

转载于:https://www.cnblogs.com/sunjingjingking/p/10203962.html

你可能感兴趣的文章