• 装饰器


    import time
    def timmer(func):
        #函数名可以当做函数的参数
        def inner():
            start = time.time()
            func()
            end = time.time()
            print(end - start)
        return inner
    
    def hahaha():
        time.sleep(0.1)
        print('aaaa')
    
    #hahaha()
    # timmer(hahaha)
    #我们不能修改这个函数的调用方式
    #也不能修改原代码
    # hahaha = timmer(hahaha)  #timmer函数的地址给了hahaha
    # hahaha()  #实际上执行的是timmer
    
    import time
    def timmer(func):
        #函数名可以当做函数的参数
        def inner():
            start = time.time()
            func()
            end = time.time()
            print(end - start)
        return inner
    
    def 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 inner
    
    def 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 inner
    
    
    def 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
    
    @wrapper
    def aaa():
        print('asghksdlhf')
    
    @wrapper
    def bbb():
        print('asghksdlhf')
    
    # aaa()
    # bbb()
    # aaa()
    # bbb()
    import time
    def wrapper(func):  # 装饰
        def inner(*args, **kwargs):
            start = time.time()
            ret = func(*args, **kwargs)
            end = time.time()
            print(end - start)
            return ret
        return inner
    
    @wrapper
    def lll():
        time.sleep(0.1)
        print('hello')
    
    lll()
  • 相关阅读:
    eclipse如何运行maven项目
    node.js的ejs模版引擎
    java中?和A、B、T、E、K、V的区别
    public static <T> Map<String, T> json2map
    Session深入理解
    maven指定构建的编码格式
    Effective java-泛型思维导图
    Effective java-枚举和注解思维导图
    java编程思想-泛型思维导图
    java编程思想-枚举类型思维导图
  • 原文地址:https://www.cnblogs.com/ctztake/p/7244971.html
Copyright © 2020-2023  润新知