"""
带参数的装饰器
"""
from functools import wraps
def log(name=None):
""" 记录函数执行的日志 """
def decorator(func):
# *args表示传入元组类型,**kwargs表示传入字典类型
@wraps(func)
def wrapper(*args, **kwargs):
""" 装饰器内部的函数 """
print("{0}.start...".format(name))
print(args)
print(kwargs)
res = func(*args, **kwargs)
print("{0}.end...".format(name))
return res
return wrapper
return decorator
@log('hello')
def hello():
""" 简单功能模拟 """
print("hello...")
if __name__ == "__main__":
# # 发现输出的都是装饰器的doc和name
# print("doc:{}".format(hello.__doc__)) # 输出:doc: 装饰器内部的函数
# print("name:{}".format(hello.__name__)) # 输出:name:wrapper
# 在装饰器前加了@wraps(func)后,输出原本的doc和name
print("doc:{}".format(hello.__doc__)) # 输出:doc: 简单功能模拟
print("name:{}".format(hello.__name__)) # 输出:name:hello
hello()