装饰器进阶

from functools import wraps
def wrap1(f):
    @wraps(f)
    def inner1():
        print('inner1() before')
        f()
        print('inner1() after')

    return inner1


def wrap2(f):
    @wraps(f)
    def inner2():
        print('inner2() before')
        f()
        print('inner2() after')

    return inner2


@wrap1  # func = wrap1(inner2),把inner2传进来了
@wrap2  # func = wrap2(func) = inner2     先执行这个,因为离被装饰函数func()最近
def func():
    '''
    这里是func
    '''
    print('func()')

func()
print(func.__name__)            # 返回函数名,如果没有wraps(f)装饰,返回的是inner1而不是func
print(func.__doc__)             # 返回函数的注释
原文地址:https://www.cnblogs.com/hhsh/p/9535807.html