装饰器

Posted forjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。

1,装饰器

本质:本质就是一个闭包函数。------装饰器是函数的重点内容,所以必须要掌握。

装饰器的功能:在不修改函数的情况下原函数增加功能。

2,装饰器的基本模型

 

def timer(func)
    def inner(*args,**kwargs)
        ‘’‘’‘’执行函数前要做的‘’‘’
            ret=func(*args,**kwargs)
        ‘‘‘‘‘‘‘执行函数后要做的‘’‘’‘’‘’
            return ret
        return inner
@timer 
def func2()
    print(‘in func2‘)
       
func2()

 

 3.有一个参数的装饰器

技术分享
def outer(flag):
    def timer(func):
        def inner(*args,**kwargs):
            if flag:
                print(‘‘‘执行函数之前要做的‘‘‘)
            re = func(*args,**kwargs)
            if flag:
                print(‘‘‘执行函数之后要做的‘‘‘)
            return re
        return inner
    return timer

@outer(False)
def func():
    print(111)

func()
View Code

4,有多个参数的装饰器

技术分享
def wrapper1(func):
    def inner():
        print(wrapper1 ,before func)
        func()
        print(wrapper1 ,after func)
    return inner

def wrapper2(func):
    def inner():
        print(wrapper2 ,before func)
        func()
        print(wrapper2 ,after func)
    return inner

@wrapper2
@wrapper1
def f():
    print(in f)

f()
View Code

这个代码执行后的效果是,先执行wrapper1的before,再执行wrapper2的before---》wrapper2的after---》再执行wrapper1里的after。

顺序方面是有点绕。

 

以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象学习之八,装饰器

thymeleaf 片段渲染后重新加载 javascript

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码