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__ (注释的内用赋值#)



  • 相关阅读:
    Appium学习实践(二)Python简单脚本以及元素的属性设置
    Appium学习实践(三)测试用例脚本以及测试报告输出
    Appium学习实践(一)简易运行Appium
    Appium学习实践(四)结构优化
    js中对小数取整的函数
    C#基础 面试中常出现的问题
    repeater中的删除按钮实现
    js对fck编辑器取值 赋值
    jQuery对select操作
    进制转换(二进制 八进制 十进制 十六进制)
  • 原文地址:https://www.cnblogs.com/du-jun/p/9767730.html
Copyright © 2011-2022 走看看