python基础知识之装饰器wrapper

装饰器的作用:

           不想修改函数的调用方式但是又想在原来的函数前后添加新的功能

装饰器的原则:开放封闭原则

            对扩展是开放的 

            对修改是封闭的

装饰器语法糖:在被修饰函数头上添加@装饰器名

1.装饰器固定模式

def werpper(func):
    def inner(*args,**kwargs):
       ret=func(*args,**kwargs)
       return ret
    return inner

@werpper
def dom():
    print("")
    return ""
dom()
View Code

2.完美模式

from functools import wraps
def werpper(func):
    @wraps()#为了获取原函数信息 例如dom.__name_获取原函数名_  dom.__doc__获取原函数信息
    def inner(*args,**kwargs):
       ret=func(*args,**kwargs)
       return ret
    return inner

@werpper
def dom():
    print("")
    return ""
dom()
View Code

3.带参数装饰器

from functools import wraps
def demo(**kwargs):
  def werpper(func):
    @wraps()#为了获取原函数信息 例如dom.__name_获取原函数名_  dom.__doc__获取原函数信息
    def inner(*args,**kwargs):
       ret=func(*args,**kwargs)
       return ret
    return inner

@demo("任何数据类型")
def dom():
    print("")
    return ""
dom()
View Code

4.多个装饰器修饰一个函数

from functools import wraps
def demo2(**kwargs):
  def werpper(func):
    @wraps()#为了获取原函数信息 例如dom.__name_获取原函数名_  dom.__doc__获取原函数信息
    def inner(*args,**kwargs):
       ret=func(*args,**kwargs)
       return ret
    return inner



def demo1(**kwargs):
  def werpper(func):
    @wraps()#为了获取原函数信息 例如dom.__name_获取原函数名_  dom.__doc__获取原函数信息
    def inner(*args,**kwargs):
       ret=func(*args,**kwargs)
       return ret
    return inner

@demo2("任何数据类型")
@demo1("任何数据类型")
def dom():
    print("")
    return ""
dom()
"""执行顺序套娃形式
demo2  func()前-—>  demo1  func()前——>func()——>demo1  func()后——>demo2  func()后
"""
View Code

猜你喜欢

转载自www.cnblogs.com/youzhatongnian925280337/p/9893245.html