装饰器

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

二、原则:

开放封闭原则:

开放:对扩展是开放的

封闭:对修改是封闭的

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

没有使用语法糖

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

结果:

原文地址:https://www.cnblogs.com/jcb9426986/p/10753268.html