zoukankan      html  css  js  c++  java
  • PYTHON-有参装饰器,无参装饰器,语法糖

    装饰器
    装饰器就是闭包函数的一种应用场景

    一 为何要用装饰器
    #开放封闭原则:对修改封闭,对扩展开放

    二 什么是装饰器
    装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。
    强调装饰器的原则:
    1 不修改被装饰对象的源代码
    2 不修改被装饰对象的调用方式
    装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能

    三 装饰器的使用
    1. 无参装饰器
    def 装饰器名字(func):
    def wrapper(*args,**kwargs):
    #func是被装饰的对象,这里可以写执行前的功能
    res=func(*args,**kwargs)
    # 这里可以写执行后的功能
    return res
    return wrapper

    @装饰器名字 #被装饰的函数名字 = 装饰器名字(被装饰的函数内存地址)
    def 被装饰的函数名字():
    pass

    2. 有参装饰器
    def 装饰器名字(参数1,参数2,...):
    def outter(func):
    def wrapper(*args,**kwargs):
    res=func(*args,**kwargs)
    return res
    return wrapper
    return outter
    @装饰器名字(值1,值2,...) #@outter
    def 被装饰的函数名字():
    pass


    3. 语法糖:在被装饰对象正上方单独一行写
    无参:@装饰器的名字
    有参:@装饰器的名字(arg1,arg2,...)

    @timmer # index=timmer(index)
    def index():
    pass

    @auth2(engine='file') # @名字 # index=名字(index)
    def index():
    pass


    叠加多个装饰器
    @deco1
    @deco2
    @deco3
    def index():
    pass
    解释语法的顺序:自下而上,deco3=》deco2=》deco1
    调用index()时才开始触发装饰器内部闭包函数的执行,闭包函数执行顺序是:自上而条,
    deco1.wrapper1=>deco2.wrapper2=>deco3.wrapper3


    wrapper.__name__=func.__name__ (函数名字赋值)
    wrapper.__doc__=func.__doc__ (注释的内用赋值#)



  • 相关阅读:
    [UE4]利用取模运算达到循环遍历数组的目的
    RESTful登录设计(基于Spring及Redis的Token鉴权)
    Nginx/LVS/HAProxy负载均衡软件的优缺点详解
    业务中使用分布式的场景
    mycat系列-Mycat 分片规则
    MyCat
    mysql 分区说明
    mysql 表分区 查看表分区 修改表分区
    MySql 分区 分库 分表
    tomcat7部署多个web应用不同编码,端口
  • 原文地址:https://www.cnblogs.com/du-jun/p/9767730.html
Copyright © 2011-2022 走看看