当前位置:   article > 正文

先看看装饰器

装饰器实在不改变原有代码的基础上注入新的代码从而实现特定的目的
  1. # 最简单的装饰器,运行顺序
  2. def w1(func):
  3. print('装饰器正在装饰....')
  4. print(func)
  5. def inner():
  6. print('正在进行权限验证...')
  7. func() # f1()
  8. return inner
  9. @w1 # 执行到这里就会调用函数w1,并且将f1作为参数传递给w1,并把返回值inner函数赋值给f1
  10. def f1():
  11. print('正在运行f1...')
  12. @w1
  13. def f2():
  14. print('正在运行f2...')
  15. f1()
  1. # 多个装饰器装饰同一个函数的运行顺序
  2. def w1(func):
  3. print('正在用w1进行装饰...')
  4. print(func)
  5. def inner():
  6. print('正在运行w1.inner....')
  7. return '[w1]' + func() + '[w1]'
  8. return inner
  9. def w2(func):
  10. print('正在用w2进行装饰...')
  11. print(func)
  12. def inner():
  13. print('正在运行w2.inner....')
  14. return '[w2]' + func() + '[w2]'
  15. return inner
  16. @w1
  17. @w2
  18. def text():
  19. print('正在运行被装饰的函数...')
  20. return '流程验证'
  21. print(text)
  22. ret = text()
  23. print(ret)
  1. # 装饰的原函数有参数,那么闭包函数必须保持参数个数一致,并且将参数传递给原方法.
  2. def w1(func):
  3. print('正在装饰...')
  4. def inner(haha):
  5. print('正在运行闭包...')
  6. func(haha)
  7. return inner
  8. @w1
  9. def text(name):
  10. print(f'我叫{name}')
  11. text('李太白')
  1. # 如果装饰的原函数有多个参数或不定长参数
  2. def w1(func):
  3. print('装饰中..')
  4. def inner(*args): # 此处聚合
  5. print('运行inner..')
  6. func(*args) # 此处打散
  7. return inner
  8. @w1
  9. def sum_(a, b, c):
  10. print(sum([a, b, c]))
  11. sum_(11, 12, 13)
  1. # 对带返回值的函数进行装饰
  2. def w1(func):
  3. print('正在装饰...')
  4. def inner(*args):
  5. print('正在运行inner...')
  6. return func(*args)
  7. return inner
  8. @w1
  9. def sum_(a, b, c):
  10. print('正在运行函数...')
  11. return sum([a, b, c])
  12. ret = sum_(1, 2, 3)
  13. print(ret)
  1. # 带参数的装饰器
  2. def w1(name='齐天大圣'):
  3. print(f'{name}正在运行w1....')
  4. def w2(func):
  5. print(f'{name}正在运行w2....')
  6. def inner():
  7. print(f'{name}正在运行inner....')
  8. func()
  9. return inner
  10. return w2
  11. @w1('猪八戒')
  12. def text():
  13. print('正在运行text...')
  14. text()
  1. # 万能装饰器
  2. def wanneng(func):
  3. def inner(*args, **kwargs):
  4. return func(*args, **kwargs)
  5. return inner
  6. @wanneng
  7. def text():
  8. print('正在运行text..')
  9. @wanneng
  10. def text1(a):
  11. print(a)
  12. text()
  13. text1(9)

转载于:https://www.cnblogs.com/zyyhxbs/p/11072982.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/213314?site
推荐阅读
相关标签
  

闽ICP备14008679号