装饰器的好处,复用了代码,缺点就是原函数的元信息不见了
比如函数docstring、_name_、参数列表
如下代码:
- def use_logging(level = "debug"):
- def decorator(func):
- def wrapper(*args, **kwargs):
- print("[%s] %s is running" % (level, func.__name__))
- return func(*args, **kwargs)
- return wrapper
- return decorator
-
- def bar1():
- print("i am bar1")
-
- def bar2():
- print("i am bar2")
-
- if __name__ == "__main__":
- #这里就是带参数的原形
- f = use_logging(level = "info")(bar1)
- f()
- print(f.__name__)
- print(f.__doc__)
程序运行截图如下:

这里想让他打印bar1。
这里要使用functools
如下代码:
- import functools
- def use_logging(level = "debug"):
- def decorator(func):
- @functools.wraps(func)
- def wrapper(*args, **kwargs):
- print("[%s] %s is running" % (level, func.__name__))
- return func(*args, **kwargs)
- return wrapper
- return decorator
-
- def bar1():
- print("i am bar1")
-
- def bar2():
- print("i am bar2")
-
- if __name__ == "__main__":
- #这里就是带参数的原形
- f = use_logging(level = "info")(bar1)
- f()
- print(f.__name__)
- print(f.__doc__)
运行截图如下:







![战神引擎传奇手游【1.76盛战传奇免授权版[摸摸登陆器]】最新整理Win系复古服务端+安卓苹果双端+GM授权物品后台+详细搭建教程](https://cdn.jxasp.com:9143/image/20251106/1B4E8594B3BEB90E8601D63A8A39CB0B.jpg)













