带参数的装饰器
带参数的装饰器
标准装饰器(未带参)
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