zoukankan      html  css  js  c++  java
  • python装饰器,其实就是对闭包的使用。

    装饰器

    理解装饰器要先理解闭包(在闭包中引用函数,可参考上一篇通过例子来理解闭包)。

    在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

    装饰器的实质就是对闭包的使用,原函数被当作参数,处理完的返回值又赋给原函数。

    1. 装饰器用来装饰函数;
    2. 返回一个函数对象;
    3. 被装饰函数标识符指向返回的函数对象;
    4. 语法糖 @dec

    通过一个例子体会,和前边的在闭包中引用函数进行对比。很像。

    Def dec(func):

             Print(’call dec’)

             Def in_dec(*arg): 

                       Print (‘in dec arg=’, arg)

                       If len(arg) == 0:

                                Return 0

                      For val in arg:

                                If not isinstance(val,int):

                                         Return 0

                       Return func(*arg)

             Return in_dec

    @dec

    Def my_sum(*arg):  #my_sum = in_dec

             Print (‘in my_sum’)

             Return sum(arg)

    Print (my_sum(1,2,3,4,5))

    结果:

    Call dec

    n dec arg=(1,2,3,4,5)

    in my sum

    15

    执行过程:首先由于@dec,代码会调用函数dec,而且这个函数的参数就是原函数my_sum。装饰器会返回新的函数对象in_dec,同时My_sum被当作了enclosing内部变量被in_dec使用。然后会被my_sum接收,被装饰的函数指向新的函数。my_sum = in_dec,然后内部调用了最原来的my_sum函数。

  • 相关阅读:
    10.17 作业
    10.12 classmethod,staticmethod,反射,魔法方法
    10.11 组合,封装,多态
    10.11 作业
    day20 作业
    10.10 类的继承,继承关系,派生,新式类,经典类
    10.9 类,对象,查找顺序,对象绑定方法
    day 55小结
    day 54小结
    day 53小结
  • 原文地址:https://www.cnblogs.com/christychang/p/6550752.html
Copyright © 2011-2022 走看看