zoukankan      html  css  js  c++  java
  • 装饰器基础知识

    装饰器是可调用的对象,其参数是另一函数(被装饰的函数),装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。

    假如有个名为 decorate 的装饰器:
    @decorate
    def target():
        print('running target()')
    上述代码的效果与下述写法一样:
    def target():
        print('running target()')
    target = decorate(target)
    两种写法的最终结果一样:上述两个代码片段执行完毕后得到的 target 不一定是原来那个 target 函数,而是 decorate(target) 返 回的函数。
    为了确认被装饰的函数会被替换,请看示例 7-1 中的控制台会话。
       示例 7-1 装饰器通常把函数替换成另一个函数
    def deco(func):
        def inner():
            print('running inner()')
    
        return inner
    
    
    @deco
    def target():
        print('running target()')
    
    
    target()
    print(target)
    严格来说,装饰器只是语法糖。如前所示,装饰器可以像常规的可调用 对象那样调用,其参数是另一个函数。有时,这样做更方便,尤其是做 元编程(在运行时改变程序的行为)时。
    综上,装饰器的一大特性是,能把被装饰的函数替换成其他函数。第二 个特性是,装饰器在加载模块时立即执行。
     
    人生就是要不断折腾
  • 相关阅读:
    通过微软的HTML Help Workshop 利用.html文件 生成简单的chm帮助类的文件
    CHM编写软件
    tinyxml使用笔记与总结
    UCOS源码剖析 (一)
    灵性领悟的四个阶段-肯·威尔伯
    ans menu list
    lxm --- ans lb config
    macvtap介绍
    影子系统密码忘记
    Linux环境安装.NET运行环境
  • 原文地址:https://www.cnblogs.com/xiangxiaolin/p/11652858.html
Copyright © 2011-2022 走看看