关键词搜索

源码搜索 ×
×

Python笔记-函数装饰器的缺点

发布2020-02-26浏览4985次

详情内容

装饰器的好处,复用了代码,缺点就是原函数的元信息不见了

比如函数docstring、_name_、参数列表

如下代码:

  1. def use_logging(level = "debug"):
  2. def decorator(func):
  3. def wrapper(*args, **kwargs):
  4. print("[%s] %s is running" % (level, func.__name__))
  5. return func(*args, **kwargs)
  6. return wrapper
  7. return decorator
  8. def bar1():
  9. print("i am bar1")
  10. def bar2():
  11. print("i am bar2")
  12. if __name__ == "__main__":
  13. #这里就是带参数的原形
  14. f = use_logging(level = "info")(bar1)
  15. f()
  16. print(f.__name__)
  17. print(f.__doc__)

程序运行截图如下:

这里想让他打印bar1。

这里要使用functools

如下代码:

  1. import functools
  2. def use_logging(level = "debug"):
  3. def decorator(func):
  4. @functools.wraps(func)
  5. def wrapper(*args, **kwargs):
  6. print("[%s] %s is running" % (level, func.__name__))
  7. return func(*args, **kwargs)
  8. return wrapper
  9. return decorator
  10. def bar1():
  11. print("i am bar1")
  12. def bar2():
  13. print("i am bar2")
  14. if __name__ == "__main__":
  15. #这里就是带参数的原形
  16. f = use_logging(level = "info")(bar1)
  17. f()
  18. print(f.__name__)
  19. print(f.__doc__)

运行截图如下:

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载