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

    # 装饰器形成的过程 : 最简单的装饰器 有返回值的 有一个参数 万能参数
    # 装饰器的作用
    # 原则 :开放封闭原则
    # 语法糖 :@
    # 装饰器的固定模式

    import time
    # # print(time.time()) # 获取当前时间
    # # time.sleep(10)  #让程序在执行到这个位置的时候停一会儿
    
    # def timmer(f):    #装饰器函数
    #     def inner():
    #         start = time.time()
    #         ret = f()       #被装饰的函数
    #         end = time.time()
    #         print(end - start)
    #         return ret
    #     return inner
    #
    # @timmer         #语法糖 @装饰器函数名  #与func = timmer(func)功能相同
    # def func():     #被装饰的函数
    #     time.sleep(0.01)
    #     print('老板好同事好大家好')
    #     return '新年好'
    # # func = timmer(func)
    # ret = func()   #inner()
    # print(ret)
    # 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
    # timmer 就是一个装饰器函数,只是对一个函数 有一些装饰作用

    # 原则: 开放封闭原则
    # 开放 : 对扩展是开放的
    # 封闭 : 对修改是封闭的
    # 封版

    装饰器形成过程
    #装饰带参数函数的装饰器
    # def timmer(f):    #装饰器函数
    #     def inner(*args,**kwargs):    #为应对传参个数和方式不确定的情况
    #         #(1,2) /(1)
    #         start = time.time()
    #         ret = f(*args,**kwargs)  #f(1,2)       #被装饰的函数
    #         end = time.time()
    #         print(end - start)
    #         return ret
    #     return inner
    # 有两个参数的情况
    # @timmer         #语法糖 @装饰器函数名
    # def func(a,b):     #被装饰的函数
    #     time.sleep(0.01)
    #     print('老板好同事好大家好',a,b)
    #     return '新年好'
    # 有一个参数的情况
    # @timmer         #语法糖 @装饰器函数名
    # def func1(a):     #被装饰的函数
    #     time.sleep(0.01)
    #     print('老板好同事好大家好',a)
    #     return '新年好'
    
    # # func = timmer(func)
    # ret = func(1,2)   #inner()
    
    # ret = func(1,b = 2)   #inner()  #实参里有关键字传参时
    # print(ret)

    装饰器固定格式

    # def wrapper(f):    #装饰器函数,f是被装饰的函数
    #     def inner(*args,**kwargs):
    #         '''在被装饰函数之前要做的事'''
    #         ret = f(*args,**kwargs)    #被装饰的函数
    #         '''在被装饰函数之后要做的事'''
    #         return ret
    #     return inner

    示例

    # def wrapper(f):    #装饰器函数,f是被装饰的函数
    #     def inner(*args,**kwargs):
    #         '''在被装饰函数之前要做的事'''
    #         ret = f(*args,**kwargs)    #被装饰的函数
    #         '''在被装饰函数之后要做的事'''
    #         return ret
    #     return inner
    #
    # @wrapper         #语法糖 @装饰器函数名
    # def func(a,b):     #被装饰的函数
    #     time.sleep(0.01)
    #     print('老板好同事好大家好',a,b)
    #     return '新年好'
    def wrapper(func):   #qqxing
        def inner(*args,**kwargs):
            ret = func(*args,**kwargs)   #被装饰的函数
            return ret
        return inner
    
    @wrapper        #qqxing = wrapper(qqxing)
    def qqxing():
        print(123)
    
    ret = qqxing()   #inner()

     完美的装饰器

    # from functools import wraps
    # def wrapper(f):    #装饰器函数,f是被装饰的函数
    #     @wraps(f)
    #     def inner(*args,**kwargs):
    #         '''在被装饰函数之前要做的事'''
    #         ret = f(*args,**kwargs)    #被装饰的函数
    #         '''在被装饰函数之后要做的事'''
    #         return ret
    #     return inner


  • 相关阅读:
    第1章:程序设计和C语言(C语言入门)
    倒计时IE6+
    uploadify 使用 详细 说明
    HTTP 错误
    asp.net 向后台提交 html 代码段 包括 <> 标签
    C#使用NLog记录日志
    IE浏览器 location.href 不跳转
    .Net Core 导出Excel
    .net mvc 获取acion 返回类型
    sql sever 执行较大的文件脚本
  • 原文地址:https://www.cnblogs.com/aj-AJ/p/10823056.html
Copyright © 2011-2022 走看看