版本一:写了很多函数,添加日志: 在 什么时间 调用了什么函数
import time
def log(func):
def inner(*args,**kwargs):
ret = func(*args,**kwargs)
print(f'{time.strftime("%Y-%m-%d %H:%M:%S")} 执行了{func.__name__}')
return ret
return inner
@log
def login():
print('登录')
@log
def register():
print('注册')
@log
def show_goods():
print('查看所有商品信息')
@log
def add_goods():
print('商品加入购物车')
login() # 2020-07-20 13:14:25 执行了login
版本二:登录和注册的信息 写到 auth.log文件里,所有的购物信息 写到operate.log文件里
import time
def log(func):
def inner(*args,**kwargs):
ret = func(*args,**kwargs)
if func.__name__ == 'login' or func.__name__ == 'register':
with open('auth.log',encoding='utf-8',mode='a')as f1:
msg = f'{time.strftime("%Y-%m-%d %H:%M:%S")} 执行了{func.__name__}'
f1.write(msg)
else:
with open('operate.log',encoding='utf-8',mode='a')as f2:
msg = f'{time.strftime("%Y-%m-%d %H:%M:%S")} 执行了{func.__name__}'
f2.write(msg)
return ret
return inner
@log
def login():
print('登录')
@log
def register():
print('注册')
@log
def show_goods():
print('查看所有商品信息')
@log
def add_goods():
print('商品加入购物车')
login()
add_goods()
版本三:
import time
def logger(path):
def log(func):
def inner(*args,**kwargs):
ret = func(*args,**kwargs)
with open(path,encoding='utf-8',mode='a')as f1:
msg = f'{time.strftime("%Y-%m-%d %H:%M:%S")} 执行了{func.__name__}\n'
f1.write(msg)
return ret
return inner
return log
@logger('auth.log')
def login():
print('登录')
# @logger('auth.log') ---> ret = logger('auth.log')
# ---> @ret ---> login = ret(login)
# @logger('auth.log') ---> logger('auth.log')返回一个log --->@log
@logger('auth.log')
def register():
print('注册')
@logger('operate.log')
def show_goods():
print('查看所有商品信息')
@logger('operate.log')
def add_goods():
print('商品加入购物车')
login()
add_goods()
精髓:
# 原本有个装饰器wrapper
# def wrapper(func):
# def inner():
# pass
# return inner
# 需要
# @wrapper
# def func():
# pass
# ----->
# @xxx('参数')
# def func():
# pass
# 则,把原来的装饰器改为:
# def xxx(*args):
# def wrapper(func):
# def inner():
# pass
# return inner
# return wrapper