初识装饰器

装饰器:

def test():
    print(123)

def wrapper(func):  # 装饰器函数
    def inner():
        print("before")
        func()  # 执行test函数(被装饰的函数)
        print("after")
    return inner  # 返回inner的内存地址

ret = wrapper(test)  # 返回值为inner,则inner的内存地址赋给ret
ret()  # 实际调用inner函数

装饰器的作用:在不改变函数调用方式的基础上,在被装饰的函数的前、后添加功能

开放封闭原则:

  1. 开放:对扩展是开放的
  2. 封闭:对修改是封闭的

进一步了解装饰器:

  1. 使用"语法糖"装饰函数,使用方式:@装饰器函数名
  2. @装饰器函数名,要紧紧贴在被装饰函数的上面,用来修饰被装饰函数
def wrapper(func):  # 装饰器函数
    def inner():
        print("before")
        ret = func()  # 执行test函数(被装饰的函数)
        print("after")
        return ret  # #返回被装饰函数的返回值
    return inner  # 返回inner的内存地址

@wrapper  # 相当于执行 test = wrapper(test)
def test():
    print(123)
    return "ABC"  # 通过inner()函数返回自己的返回值

ret = test()
print(ret)

装饰"带参数函数"的装饰器:

def wrapper(func):  # 装饰器函数
    def inner(*args, **kwargs):
        print("before")
        ret = func(*args, **kwargs)  # 执行test函数(被装饰的函数)
        print("after")
        return ret  # #返回被装饰函数的返回值
    return inner  # 返回inner的内存地址

@wrapper  # 相当于执行 test = wrapper(test)
def test(param):
    print(123)
    return param  # 通过inner()函数返回自己的返回值

ret = test("ABC")
print(ret)

装饰器:

def wrapper(func):
    def inner(*args, **kwargs):
        """在被装饰函数之前要做的事"""
        ret = func(*args, **kwargs)
        """在被装饰函数之后要做的事"""
        return ret
    return inner

 

posted @ 2018-08-31 17:36  就俗人一个  阅读(156)  评论(0编辑  收藏  举报