装饰器进阶

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__)             # 返回函数的注释

 

posted @ 2018-08-25 23:17  该搬砖啦  阅读(93)  评论(0编辑  收藏  举报