example09.py 914 B

123456789101112131415161718192021222324252627282930313233343536
  1. """
  2. 装饰器 - 背后的设计模式是代理模式(注意不是装饰器模式)
  3. 代理模式通常是让代理对象去执行被代理对象的行为并在这个过程中增加额外的操作
  4. 这种设计模式最适合处理代码中的横切关注功能(与正常业务没有必然联系但是又需要执行的功能)
  5. """
  6. from functools import wraps
  7. from time import time
  8. def record(output=print):
  9. def decorate(func):
  10. @wraps(func)
  11. def wrapper(*args, **kwargs):
  12. start = time()
  13. result = func(*args, **kwargs)
  14. output(func.__name__, time() - start)
  15. return result
  16. return wrapper
  17. return decorate
  18. @record()
  19. def some_task():
  20. print(123 ** 100000)
  21. if __name__ == '__main__':
  22. some_task()
  23. print(some_task.__name__)
  24. # 取消装饰器
  25. some_task = some_task.__wrapped__
  26. some_task()