• 带参数的装饰器


    带参数的装饰器

    标准装饰器(未带参)

    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
    
  • 相关阅读:
    C++处理Json串——jsoncpp库
    古典文学--本经阴符七术
    古典文学--素书
    网络编程之getaddrinfo
    网络编程之addrinfo
    跳表数据结构
    MySQL 编译安装并且开启DEBUG模式
    volatile关键字详解
    istringstream、ostringstream、stringstream 类简介
    Selenium入门21 Select操作
  • 原文地址:https://www.cnblogs.com/wyh0717/p/13101141.html
Copyright © 2020-2023  润新知