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

  • 相关阅读:
    静态与非静态(转改)
    关于odp.net的FetchSize属性
    SQL_SERVER 导oracle(转)
    win7电脑上wifi
    Oracle对象统计信息
    SQL_SERVER 连接oracle(转)
    linq in 语法
    关于引擎的设计
    温习设计模式
    技巧类
  • 原文地址:https://www.cnblogs.com/christychang/p/6550752.html
Copyright © 2011-2022 走看看