python 装饰器,python装饰,import tim


技术图片
import timedef timmer(func):    #函数名可以当做函数的参数    def inner():        start = time.time()        func()        end = time.time()        print(end - start)    return innerdef hahaha():    time.sleep(0.1)    print(‘aaaa‘)#hahaha()# timmer(hahaha)#我们不能修改这个函数的调用方式#也不能修改原代码# hahaha = timmer(hahaha)  #timmer函数的地址给了hahaha# hahaha()  #实际上执行的是timmerimport timedef timmer(func):    #函数名可以当做函数的参数    def inner():        start = time.time()        func()        end = time.time()        print(end - start)    return innerdef hahaha():    time.sleep(0.1)    print(‘aaaa‘)# hahaha = timmer(hahaha)  #timmer函数的地址给了hahaha# hahaha()# def timmer(func):  #---> hahaha#     def inner(x,y):#         func(x,y)  # --->hahaha#     return inner## def hahaha(a,b):#     time.sleep(0.1)#     print(a,b)## hahaha = timmer(hahaha)# #我们不能修改这个函数的调用方式# hahaha(1,2)  #==>inner(1,2)def timmer(func):  #---> hahaha    def inner(x,y):        func(x,y)  # --->hahaha    return innerdef hahaha(a,b):    time.sleep(0.1)    print(a,b)def kkk(a):    print(a)# hahaha = timmer(hahaha)# hahaha(1,2) #inner(1,2)def timmer(func):  #---> hahaha    def inner(*args,**kwargs):        #args == (1,2)  kwargs == {}        #*args == 1,2   **kwargs == a =1,b = 2        func(*args,**kwargs)  # --->hahaha    return innerdef kkk(a):    print(a)kkk = timmer(kkk)# kkk(1)def timmer(func):  #---> jjj    def inner(*args,**kwargs):        ret = func(*args,**kwargs)  # --->ret = jjj()        return ret    return inner@timmer  #jjj = timmer(jjj)  语法糖def jjj():    return 123# jjj = timmer(jjj)ret = jjj()  #==>inner#装饰器的本质 :闭包函数#功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能def timmer(func):    def inner(*args,**kwargs):        ‘‘‘添加函数调用之前的扩展代码‘‘‘        ret = func(*args,**kwargs)        ‘‘‘添加函数调用之后的扩展代码‘‘‘        return ret    return inner#设计模式 原则 开放封闭原则#对扩展是开放的#对修改是封闭的def wrapper(func):#装饰    def inner(*args,**kwargs):        ret = func(*args,**kwargs)        return ret    return inner@wrapperdef aaa():    print(‘asghksdlhf‘)@wrapperdef bbb():    print(‘asghksdlhf‘)# aaa()# bbb()# aaa()# bbb()import timedef wrapper(func):  # 装饰    def inner(*args, **kwargs):        start = time.time()        ret = func(*args, **kwargs)        end = time.time()        print(end - start)        return ret    return inner@wrapperdef lll():    time.sleep(0.1)    print(‘hello‘)lll()
技术图片

一、带参数的装饰器;------开关

技术图片
__author__ = ‘Administrator‘F=Truedef outer(F):    def wap(fun):#gg        def inner(*args,**kwargs):            if F:                print("inner   before")                ret=fun(*args,**kwargs)#gg()                print("inner   after")            else:                ret=fun(*args,**kwargs)            return  ret        return inner    return wap@outer(F) #先执行out(F) [email protected]>gg=wap(gg)def gg():    print("gg............")gg()#inner()
技术图片

二、多个装饰器装饰一个函数

技术图片
__author__ = ‘Administrator‘def yn(fun):#fun=sc_inner    def yn_inner(*args,**kwargs):        print("yun..........before")        ret=fun(*args,**kwargs)#sc_inner()        print("yn...........after")        return ret    return yn_innerdef sx(fun):#fun=china    def sx_inner(*args,**kwargs):        print("sx..........before")        ret=fun(*args,**kwargs)#china()        print("sx...........after")        return ret    return sx_inner@yn #china=yn(china)-----china=yn(sx(china))----china=yn(sx_inner)---->china=yn_ineer@sx  #china=sx(china)----china=def china():    print("china is good ")china()#yn_inner()
技术图片

三、装饰器的一个应用

技术图片
l = []def wrapper(func):    l.append(func)  #统计当前程序中有多少个函数被装饰了    def inner(*args,**kwargs):        #l.append(func)  #统计本次程序执行有多少个带这个装饰器的函数被调用了        ret = func(*args,**kwargs)        return ret    return inner@wrapper  #f1 = wrapper(f1)def f1():    print(‘in f1‘)@wrapper #f2 = wrapper(f2)def f2():    print(‘in f2‘)@wrapper #f2 = wrapper(f2)def f3():    print(‘in f3‘)print(l)

python 装饰器

评论关闭