• 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函数。

  • 相关阅读:
    常用Linux基础命令
    makefile基础
    获得当前的时间——system.currentTimeMillis()
    MapReduce提供的输入输出格式
    Hadoop HDFS文件操作的Java代码
    Hadoop2.2.0完全分布式配置
    Hadoop2.2.0伪分布模式配置
    Eclipse Plugin for Hadoop2.2.0
    Hadoop2.2.0单机模式配置
    Asp.Net 禁用cookie后使用session
  • 原文地址:https://www.cnblogs.com/christychang/p/6550752.html
Copyright © 2020-2023  润新知