浅谈几种简单的装饰器及其原理

不带参数的单层装饰器

程序一开始执行的时候便会自动的对test装饰相当于执行了test = outer(test)这条语句,所以>-----1-----<会在程序加载的时候就先打印当调用再test()的时候,test的引用已经指向了inner这个函数所以调用test()实际上是执行了inner,inner中执行完print('>-----2-----<')后,再去调用真正的test

下面的程序输出结果是:

>-----1-----<
>-----2-----<
hello world

def outer(fun):
    print(">-----1-----<")
    def inner(*args, **kwargs):
        print('>-----2-----<')
        return fun(*args, **kwargs)
    return inner


@outer
def test():
    my_str = 'hello world'
    return my_str


def main():
    print(test())


if __name__ == '__main__':
    main()
带参数的装饰器



posted @ 2018-04-18 07:23  fanlei5458  阅读(187)  评论(0编辑  收藏  举报