装饰器

装饰器的作用:原函数不改变原来的调用方式,还要在原函数上添加新的功能

开放封闭原则:

  开放:对扩展是开放的

  封闭:对修改是封闭的

简单的装饰器:

def wrapper(f):  #装饰器
     def inner():
         f()
     return inner
 @wrapper   #func=wrapper(func)
 def func():  #被装饰函数
     print("xxx你好!")
 func()

带有返回值的装饰器:

1 def wrapper(f):  #装饰器
2     def inner():
3         ret = f()
          return ret
4     return inner
5 @wrapper   # 语法糖 装饰器函数名 func=wrapper(func)
6 def func():  #被装饰函数
7     print("xxx你好!")
      return "我是返回值"
8 ret = func()
    print(ret)

加一个参数的装饰器

1 def wrapper(f):  #装饰器
2     def inner(a):
3         f(a)
4     return inner
5 @wrapper   # 语法糖 装饰器函数名 func=wrapper(func)
6 def func(a):  #被装饰函数
7     print("xxx你好!",a)
8 func(1)

万能装饰器:

def wrapper(f):  #装饰器
     def inner(*args,**kwargs):
         ret = f(*args,**kwargs)
         return ret
     return inner
 @wrapper   #func=wrapper(func)
 def func():  #被装饰函数
     print("xxx你好!")
 func()

 带参数的装饰器

多个装饰器应用:

 1 def  outer(f):
 2     def inner():
 3         print('b1_before)
 4         f()
 5         print('b1_after)
 6     return inner
 7 def outer1(f):
 8     def inner1():
 9         print('b2_before)
10         f()
11         print('b2_after)
12     return inner1
13 @outer1        
14 @outer
15 def func():
16     print("xxx你好美!")
原文地址:https://www.cnblogs.com/xixi-66/p/10051546.html