zoukankan      html  css  js  c++  java
  • python之装饰器

     
    今日内容总结:
    装饰器(闭包函数的一种应用)
    无参装饰器
    有参装饰器
     
     
    装饰器(闭包函数的一种应用)
     
    1. 什么是装饰器
    器:指的是具备某一功能的工具
    装饰:指的是为被装饰器对象添加新功能
     
    装饰器就是用来为被装饰器对象添加新功能的工具
     
    需要注意的是:装饰器本身可以是任意可调用对象,被装饰器的对象也可以是任意可调用对象
     
     
    2. 为何要用装饰器
    因为在实际开发环境中,是不允许对原代码进行操作,而且不能破坏原有的调用关系,根据实际要求还需要增添新功能
    开发需要遵循的一个原则
    开放封闭原则:封闭指的是对修改封闭,对扩展开放,就是保持原有功能并新增新的功能
     
    装饰器的实现必须遵循两大原则:
    1. 不修改被装饰对象的源代码,被操作的函数的源代码是不能进行修改
    2. 不修改被装饰器对象的调用方式
     
    装饰器的目标:就是在遵循1和2原则的前提下为被装饰对象添加上新功能
     
    3. 怎么用装饰器
     
    无参装饰器
    装饰器不需要参数传入
    有参装饰器
    装饰器需要参数传入
     
    # 装饰器模板
    def outter(func):
      def wrapper(*args,**kwargs):
        #在调用函数前加功能
        res=func(*args,**kwargs) #调用被装饰的也就是最原始的那个函数
        #在调用函数后加功能
        return res
      return wrapper
     
    注意:
    1.需要注意的是装饰器最多有三层
    2.解释装饰器时@语法的时候是”自下而上运行“
    3.执行装饰器时装饰器内的那个wrapper函数时的是”自上而下“
     
    语法糖
    什么是语法糖?
    使用了”@”语法糖后,就不需要额外代码来给”被装饰函数”重新赋值了,
    其实”@装饰器函数”的本质就是”被装饰函数 = 装饰器函数(被装饰函数#原始的被装饰函数的内存地址)”。
    为什么用语法糖?
    使用语法糖让代码简化,不需要重复在调用装饰器时,进行重复的赋值操作。
  • 相关阅读:
    vs运行代码版本不一致删除缓存
    spring framework 各版本源码下载地址
    类型初始值设定项引发异常
    datagridview 点击列标题排序
    软媒魔方u盘装系统
    sql中exists,not exists的用法
    java web第一个Servlet程序
    《ASP.NET 本质论》HttpApplication的处理管道 ,HttpMoudle,HttpHandler
    如何正确设置 Informix GLS 及 CSDK 语言环境
    Linux网络流量控制工具—Netem
  • 原文地址:https://www.cnblogs.com/haiguixiansheng/p/10721304.html
Copyright © 2011-2022 走看看