带参数的装饰器

带参数的装饰器

标准装饰器(未带参)

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
posted @ 2020-06-12 18:02  爱浪的跳蚤  阅读(106)  评论(0编辑  收藏  举报