flask(1)装饰器

1,普通的装饰器

装饰器的本质就是闭包,在不改变原来函数的基础上,拓展一个新功能。

闭包的特点:可以延长局部变量的生命周期

def outer(func):
    def inner(*args,**kwargs):
        res = func(*args,**kwargs)
        return res
    return inner

@outer()
def func():
	pass

func()
""" @ 功能
1,先把装饰器修饰的函数当成参数传递给装饰器
2,将新函数返回,去替换旧函数, func = inner

"""

2,带参数的装饰器

def outer(name):
    def wapper(func):
        def inner1(*args, **kwargs):
            res = func(*args, **kwargs)
            print("我是xxxx")
            return res

        def inner2(*args, **kwargs):
            res = func(*args, **kwargs)
            print("我是oooo")
            return res

        if name == "alex":
            return inner1
        else:
            return inner2
    return wapper

@outer("alex")
def func():
    print("how aer you ?")

func()

3,functools.wraps

在装饰器中使用,保留原来函数的属性

def wrapper(func):
    def inner(*args, **kwargs):
        res = func(*args, **kwargs)
        return res

    return inner

def func():
    pass

func()
print(func) # <function wrapper.<locals>.inner at 0x00A40BF8>
def wrapper(func):
    @wraps(func)
    def inner(*args, **kwargs):
        res = func(*args, **kwargs)
        return res

    return inner

@wrapper
def func():
    pass

func()
print(func) # <function func at 0x00480BF8>

4,伪类装饰器[Flask before_request]

func_list = []

def outer(func):
    func_list.append(func)
    
@outer
def b1():
    pass

@outer
def b2():
    pass

print(len(func_list)) # 2

5,一个函数上应用多个装饰器

就近分析

@xxx
@oooo
@xxoo
def index(a1,a2):
    return a1 + a2
from functools import wraps


def xxx(func):
    print(3)

    @wraps(func)
    def inner(*args, **kwargs):
        res = func(*args, **kwargs)
        return res

    return inner

def oooo(func):
    print(2)

    @wraps(func)
    def inner(*args, **kwargs):
        res = func(*args, **kwargs)
        return res

    return inner

def xxoo(func):
    print(1)

    @wraps(func)
    def inner(*args, **kwargs):
        res = func(*args, **kwargs)
        return res
    return inner

@xxx
@oooo
@xxoo
def index(a1, a2):
    return a1 + a2
posted @ 2021-11-17 00:31  下个ID见  阅读(132)  评论(1)    收藏  举报