1.  装饰器的原理以及为什么要使用装饰器

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

在不影响原代码结构的情况下为其添加功能

2.  装饰器的基本用法  

def test(func):
    def warpper(*args,**kwargs):
        print("====start====")
        func(*args,**kwargs)
        print("=====end====")
    return warpper

@test
def f():
    print("2018-06-04")

f()

 

3.  带参数的装饰器

def test(m):        #获取参数
    def inner(func):
        def warpper(*args,**kwargs):
            print(m)     #打印该参数
            if m==1:    #判断该参数
                print("start")
                func(*args,**kwargs)
                print("end")
        return warpper
    return inner
  
@test(m=1)    #传入参数
def f():
    print("2018-06-04")

f()

 

4.  被装饰的函数有返回值怎么处理

         res=func(*args,**kwargs)

   return res

在执行该函数的时候 接收函数的返回值,并在其后return

5.  多个装饰器的执行顺序

装饰器函数的执行顺序是分为定义阶段和执行阶段的

装饰器函数在被装饰函数定义好后立即执行

在函数定义阶段:执行顺序是从内而外的

在函数执行阶段:执行顺序由外而内,一层层执行

例子:如下  

def war1(func):
    print("war1")
    def inner(*args, **kwargs):
        print("======war1 start=====")
        func(*args, **kwargs)    #inner
        print("======war1 end=====")
    return inner

def war2(func):
    print("war2")
    def inner(*args,**kwargs):
        print("======war2 start=====")
        func(*args,**kwargs)
        print("======war2 end=====")
    return inner

@war1
@war2
def f():
    print("****self****")
f()
View Code

相关文章:

  • 2022-01-16
  • 2021-10-16
  • 2021-05-27
  • 2021-05-25
  • 2021-10-17
  • 2022-01-04
  • 2021-10-30
  • 2021-08-14
猜你喜欢
  • 2021-05-25
  • 2021-07-23
  • 2021-05-25
  • 2021-12-19
  • 2021-10-10
  • 2021-08-30
  • 2021-08-07
相关资源
相似解决方案