美文网首页
装饰器(四)-多装饰器

装饰器(四)-多装饰器

作者: mysimplebook | 来源:发表于2019-12-25 19:23 被阅读0次

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

@outer2

@outer1

def foo(*args, **kwargs):

                    pass

上述写法相当于

@outer2

def outer1(foo):

   pass

而decrator_b(foo)返回的就是一个可调用对象,多个装饰器也可以看成只有最外层的一个。这样函数foo经过装饰器装饰后,实际上等价于

foo= outer2 (outer1(foo))

如下代码

import time

def outer1(func):

    #定义一个内嵌的包装函数,给传入的函数加上计时功能的包装

    print("in outer1")

    def inner1(*args, **kwargs):

        '''inner decorator'''

        print("ininner1")

        start = time.clock()

        ret = func(*args, **kwargs)

        end = time.clock()

        print('used:', end - start)

        return ret

    #将包装后的函数返回

    return inner1

 

def outer2(func):

    #定义一个内嵌的包装函数,给传入的函数加上计时功能的包装

    print("in outer2")

    def inner2(*args, **kwargs):

        '''inner decorator'''

        print("ininner2")

        ret = func(*args, **kwargs)

        return ret

    #将包装后的函数返回

    return inner2

       当用outer1、outer2修饰下面这个函数的时候,

>>> @outer2

... @outer1

... def foo(*args, **kwargs):

...     '''docstring'''

...     print("in foo()")

...     return "hello"+args[0]

...

in outer1

in outer2

>>> 

>>> foo('world')

in inner2

in inner1

in foo()

('used:', 0.0)

'hello world'

>>> 

它其实等价于下列代码

>>> def foo(*args, **kwargs):

...     '''docstring'''

...     print("in foo()")

...     return "hello"+args[0]

...

>>> foo=outer2(outer1(foo))

in outer1

in outer2

>>> foo('world')

in inner2

in inner1

in foo()

('used:', 0.0)

'hello world'

>>> 

相关文章

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

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

  • 装饰器实验

    装饰器实验 说明 ts内包含了四个装饰器,类装饰器、属性装饰器、函数装饰器、参数装饰器,本文中测试一下其的使用。 ...

  • 装饰器

    """@装饰器- 普通装饰器- 带参数的装饰器- 通用装饰器- 装饰器装饰类- 内置装饰器- 缓存装饰器- 类实现...

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • Python装饰器(3)多装饰器装饰

    内容纯属个人理解,不对之处,欢迎指正。 多装饰器示例 运行结果: 通过现象看本质。我们注意到,程序开始执行后,装饰...

  • python——装饰器详解

    一、装饰器概念 1、装饰器 装饰器:一种返回值也是一个函数的函数,即装饰器。 2、装饰器目的 装饰器的目的:装饰器...

  • 第四篇 闭包函数、装饰器、迭代器、序列化

    一、知识储备 二、闭包函数 三、简单装饰器 四、无参装饰器修订 五、无参装饰器之auth 六、有参装饰器 七、加多...

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

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

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

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

网友评论

      本文标题:装饰器(四)-多装饰器

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