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

    一、装饰器的作用:不想修改函数的调用方式,但是还想在原来的函数前后添加功能;

    二、原则:

    开放封闭原则:

    开放:对扩展是开放的

    封闭:对修改是封闭的

    三、语法糖:@装饰器名,紧接着被装饰函数

    没有使用语法糖

    def qqxing(f):#装饰器
        def xxc(*arges,**kwargs):
            x=f(*arges,**kwargs)#被装饰函数ssl()
            return x
        return xxc
    def ssl(a,b):
        s=a+b
        print(s)
        return 'jisuanchenggong'
    ssl=qqxing(ssl)
    print(ssl(1,2))
    #3
    #jisuanchenggong

    使用语法糖:

    def qq(f):
        def cc(*arges,**kwargs):
            ret=f(*arges,**kwargs)
            return  ret
        return  cc
    @qq#语法糖
    def dd(a,b):#被装饰函数
        print('1242365756',a**2,b)
        return 'dsfggyhuieart'
    print(dd(1,2))
    #1242365756 1 2
    #dsfggyhuieart

     进阶:

    def ger1(ff):#1ff-->func
        def qqs1():#4
            print('hello1')#11
            ff()#12  执行func()
            print('hi1')#14
        return qqs1#5
    def ger2(ff):#ff-->qqs1
        def qqs2():#7
            print('hello2')#9
            ff()#10  执行恰恰是()
            print('hi2')#15
        return qqs2#8
    @ger2#6   func=ger2(func)==>qqs2
    @ger1#3  func=ger1(func)==>qqs1
    def func():#
        print('hhhhhhhhhhhhh')#13
    func()#func-->qqs2

    结果:

  • 相关阅读:
    axios封装
    python 分析列表中的字典
    python 列表解析学习
    Java常用ORM框架
    Kafka 会不会丢消息?怎么处理的?
    Node.js学习笔记【八】
    Node.js学习笔记【七】
    Node.js学习笔记【六】
    Node.js学习笔记【五】
    Node.js学习笔记【四】
  • 原文地址:https://www.cnblogs.com/jcb9426986/p/10753268.html
Copyright © 2011-2022 走看看