有参数装饰器和返回值的装饰器.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # -*- coding: UTF-8 -*-
  2. ###============ 参数返回 ============###
  3. #
  4. # def echo(msg):
  5. # print(f"徐大虫{msg}!")
  6. # def outer(arg):
  7. # def inner():
  8. # print("*" * 30) # 新增功能
  9. # arg('hello')
  10. # print("*" * 30) # 上下都可新增功能
  11. # return inner
  12. # n = outer(echo) # python 封装为 @ 。如下:
  13. # n()
  14. ###============ 单个参数传递 ============###
  15. # def echo(msg):
  16. # print(f"徐大虫{msg}!")
  17. # def outer(arg):
  18. # def inner(s):
  19. # print("*" * 30) # 新增功能
  20. # arg(s)
  21. # print("*" * 30) # 上下都可新增功能
  22. # return inner
  23. # echo = outer(echo) # python 封装为 @ 。如下:
  24. # echo('active')
  25. ###============ 多个参数传递 ============###
  26. def echo(msg):
  27. print(f"徐大虫{msg}!")
  28. def outer(arg):
  29. def inner(*args, **kwargs):
  30. print("*" * 30) # 新增功能
  31. arg(*args, **kwargs)
  32. print("*" * 30) # 上下都可新增功能
  33. return inner
  34. echo = outer(echo) # python 封装为 @ 。如下:
  35. echo('hi!')
  36. @outer
  37. def show(msg):
  38. print(f"{msg} OK")
  39. show('xclouds')
  40. ###============ 写装饰器的固定格式 ============###
  41. def auth(func):
  42. def wrapper(*args, **kwargs):
  43. r = func(*args, **kwargs)
  44. return r
  45. return wrapper
  46. @auth # foo2 = auth(foo2)
  47. def foo2(msg):
  48. up_msg= msg.upper()
  49. return up_msg
  50. r = foo2('hello')
  51. print(r)