美文网首页
装饰器函数的执行顺序

装饰器函数的执行顺序

作者: 胖虎很可爱 | 来源:发表于2018-04-20 16:28 被阅读0次

先看一下代码:

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被引用,所以外部函数的一切变量均未被释放!!!

相关文章

  • 多个装饰器存在时的执行顺序

    装饰器的执行顺序是怎样的? 装饰器函数的执行顺序分为定义阶段和执行阶段,装饰器函数在被装饰函数定义好后立即执行 在...

  • Day05

    一、装饰器进阶 多个装饰器同时装饰一个函数,执行顺序是由上往下执行被装饰函数执行之前的操作,再执行被装饰函数,最后...

  • 函数装饰器执行顺序

    当一个函数有多个装饰器时,会优先执行离函数最近的装饰器,由于装饰器返回的是函数的函数名引用,并非真正调用函数。

  • 装饰器函数的执行顺序

    先看一下代码: 程序一次从上往下执行: 执行到def outer(hre='chang'):时,把这个函数注册到内...

  • 装饰器 函数/类实现方式即参数问题

    无参装饰器 函数式 执行顺序: outer(work)(1,5)work = outer(work) 即 work...

  • Python 入门之多个装饰器执行顺序

    装饰器是 Python 用于封装函数或代码的工具,网上可以搜到很多文章可以学习,在这里要讨论的是多个装饰器执行顺序...

  • 关于python多重装饰器的执行顺序

    装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序。...

  • 二十:Python之多个装饰器装饰

    一:装饰顺序 从离函数最近装饰器开始装饰 二:装饰不带参数的函数 三:装饰固定参数 四:装饰不固定参数 五:通用装饰器

  • 装饰器(四)-多装饰器

    多个装饰器可以共同修饰一个函数,多装饰器的执行顺序从近到远或者说由下而上。其格式如下 @outer2 @outer...

  • 装饰器的执行顺序!!!

    https://www.cnblogs.com/guodengjian/articles/9134944.html

网友评论

      本文标题:装饰器函数的执行顺序

      本文链接:https://www.haomeiwen.com/subject/rdkzkftx.html