装饰器函数的执行顺序

先看一下代码:

from time import ctime, sleep


def outer(hre='chang'):
    def timefun(func):
        print(hre)

        def wrappedfunc():
            print("%s called at %s" % (func.__name__, ctime()))
            func()
        return wrappedfunc
    return timefun


@outer('it')
def foo():
    print("I am foo")

程序一次从上往下执行:

执行到def outer(hre='chang'):时,把这个函数注册到内存中,向下

执行到@outer('it')时,会找内存中def outer(hre='chang'):这个函数,返回值是timefun,此时变成了:

@timefun
def foo():
    print("I am foo")

这就变成了普通的装饰器函数,然后会执行def timefun(foo): 返回值是wrappedfunc,相当于执行了

foo=timefun(foo),因为timefun(foo)返回值是wrappedfunc,所以执行foo()就相当于执行wrappedfunc().

内部函数wrappedfunc被引用,所以外部函数的一切变量均未被释放!!!
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容