装饰器

Posted liangying666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。

# 装饰器:
# 开闭原则(开放封闭原则):对添加功能开放,对修改代码封闭

#举个例子,给一个函数,在不修改原来代码的基础上,添加新功能。
#无参数无返回值
def func():
    print(捏泥人,吹口气)
#装饰器 - 如果天气干燥,需要加水
def wrapper(fn):
    def inner():
        print(加水)
        fn()
    return inner #返回inner这个函数地址
# fun = wrapper(func) #inner这个函数地址
# fun() #调用inner函数
#但是我们不能把功能名字改了,所以
func = wrapper(func) # 我们还用原来的名字替换
func()

#有参数无返回值
def func(name,name1):
    print(你好,name,name1)

def wrapper(fn):
    def inner(*args,**kwargs): # 聚合
        fn(*args,**kwargs) #打散
        print(我想和你做朋友,args)
    return inner
func = wrapper(func) #inner
func(Tom,Jenny)

# 有参数有返回值
def func(name,name1):
    print(你好,name,name1)
    return name

def wrapper(fn):
    def inner(*args,**kwargs): # 聚合
        name = fn(*args,**kwargs) #打散 接收原函数的返回值
        print(我想和你做朋友,args)
        return name
    return inner
func = wrapper(func) #inner
print(func(Tom,Jenny)) #返回值为name


def wrapper(fn):
    def inner(*args,**kwargs): # 聚合
        name = fn(*args,**kwargs) #打散 接收原函数的返回值
        print(我想和你做朋友,args)
        return name
    return inner
@wrapper # 语法糖 相当于 func = wrapper(func)
def func(name,name1):
    print(你好,name,name1)
    return name

#总结
def wrapper(fn):
    def inner(*args,**kwargs):
        目标函数之前要做的操作
        re = fn(*args,**kwargs) re为返回值
        目标函数之后要做的操作
        return re
    return inner
在要用装饰器的函数前加上 @wrapper(语法糖)

 

以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象学习之八,装饰器

thymeleaf 片段渲染后重新加载 javascript

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码