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

    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()
  • 相关阅读:
    MySQL服务器变量:MySQL系列之八
    存储引擎:MySQL系列之七
    用户与授权:MySQL系列之六
    视图、存储函数、存储过程、触发器:MySQL系列之五
    SQL语法:MySQL系列之四
    关系型数据库基础概念:MySQL系列之开篇
    基础篇:MySQL系列之三
    多实例:MySQL系列之二
    安装篇:MySQL系列之一
    DNS
  • 原文地址:https://www.cnblogs.com/ctztake/p/7244971.html
Copyright © 2011-2022 走看看