• 带参数的装饰器


    带参数的装饰器

    标准装饰器(未带参)

    def wapper(func):
        def inner(*args,**kwargs):
            '''添加额外功能:执行被装饰函数之前操作'''
            ret = func(*args,**kwargs)
            '''添加额外功能:执行被装饰函数之后操作'''
            return ret
        return inner
    

    标准版装饰器(带参数)

    def xxx(*args): #带参数
        def wapper(func):
            def inner(*args, **kwargs):
                '''添加额外功能:执行被装饰函数之前操作'''
                ret = func(*args, **kwargs)
                '''添加额外功能:执行被装饰函数之后操作'''
                return ret
    
            return inner
        return wapper
    #装饰
    @xxx(*args)
    
    # 登录
    # 计算函数的执行时间
    # 写了很多的函数
    # 添加日志 : 在 时间 调用了什么函数
    import time
    def logger(path):
        def log(func):
            def inner(*args,**kwargs):
                ret = func(*args,**kwargs)
                with open(path,mode='a',encoding='utf-8') as f:
                    msg = '%s 执行了%s'%(time.strftime('%Y-%m-%d %H:%M:%S'),func.__name__)
                    f.write(msg)
                return ret
            return inner
        return log
    
    @logger('auth.log')
    def login():
        print('登录的逻辑')
    
    @logger('auth.log')
    def register():
        print('注册的逻辑')
    
    @logger('auth.log')     # ret = log('auth.log')   show_goods = ret(show_goods)
    def show_goods():
        print('查看所有商品信息')
    
    @logger('buy.log')
    def add_goods():
        print('商品加入购物车')
    
    # 登录和注册的信息 写到auth.log文件里
    # 所有的购物信息 写到operate.log文件里
    
    login()
    add_goods()
    show_goods()
    
    # @logger('asfg')   # logger('asfg') = log
    # @log
    # @logger
    # def show_goods():
    #     print('查看所有商品信息')
    
    # def xxx(*args):
    #     def wrapper(func):
    #         def inner(*args,**kwargs):
    #             ret = func(*args,**kwargs)
    #             return ret
    #         return inner
    #     return wrapper
    
    # 原本有一个装饰器wrapper
    # @wrapper
    # def func():
    #     pass
    
    # @xxx('参数')    == @wrapper
    # def func():
    #     pass
    
  • 相关阅读:
    关于工作习惯的一点思考
    BulkSqlCopy 批量导入数据(Ef支持)
    记录下最近项目中常用到的SQL语句
    对象化前端表单(Form)提交
    Python描述符 (descriptor) 详解
    Python装饰器之 property()
    Python魔法方法之属性访问 ( __getattr__, __getattribute__, __setattr__, __delattr__ )
    Python魔法方法总结及注意事项
    面向对象编程(二)
    面向对象编程(一)
  • 原文地址:https://www.cnblogs.com/wyh0717/p/13101141.html
Copyright © 2020-2023  润新知