zoukankan      html  css  js  c++  java
  • 带参数的装饰器

    带参数的装饰器

    标准装饰器(未带参)

    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
    
  • 相关阅读:
    python2中的SSL:CERTIFICATE_VERIFY_FAILED错误的解决办法
    head first 设计模式第一章笔记
    pycharm设置python脚本模板
    zip的压缩和解压命令
    js数组和集合互转
    查看Oracle的连接数
    转 小辉_Ray DOM性能小记
    学习总结之javaScript document对象详解
    MySQL 表的一些操作
    MySQL 的一些操作
  • 原文地址:https://www.cnblogs.com/wyh0717/p/13101141.html
Copyright © 2011-2022 走看看