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)
    严格来说,装饰器只是语法糖。如前所示,装饰器可以像常规的可调用 对象那样调用,其参数是另一个函数。有时,这样做更方便,尤其是做 元编程(在运行时改变程序的行为)时。
    综上,装饰器的一大特性是,能把被装饰的函数替换成其他函数。第二 个特性是,装饰器在加载模块时立即执行。
     
    人生就是要不断折腾
  • 相关阅读:
    FATFS 初学之 f_open/ f_close
    前端JQuery(二)
    前端JQuery(一)
    8.22MySQL(五)pymysql模块、sql注入问题
    8.21MySQL(四)基本查询语句及方法、连表、子查询
    8.20MySQL(三)外键
    8.19MySQL(二)
    8.16MySQL(一)
    8.15并发编程(四)
    8.14并发编程(三)
  • 原文地址:https://www.cnblogs.com/xiangxiaolin/p/11652858.html
Copyright © 2011-2022 走看看