装饰器

一.装饰器的引入

有这样的需求,要在不修改原函数的情况下,对函数进行扩展。

原函数:

def add(a,b):
    return a + b

需要对上面的函数进行扩展,但不能修改该函数:

def add_expand(a,b):
    a += 1
    b *= 3
    c = add(a,b)
    return c

调用扩展后的函数:

print(add_expand(10,30)) # 101

二.装饰器的使用

上面的函数已经可以在不修改源代码的情况下对原函数进行扩展,但是该扩展函数函数无法复用。所以我们可以创建一个函数,用来生成新的扩展函数,我们称这样的函数为装饰器函数。

装饰器函数:

def build_function(old_function):
    """
    这是一个装饰器函数,可以对旧函数进行扩展,生成一个新的函数
    :param old_function: 需要进行扩展的函数
    :return: 扩展后的函数
    """

    def new_function(*args, **kwargs):
        """
        这是装饰器扩展后的新函数
        :param args: 任意个数的普通变量
        :param kwargs: 任意个数的关键字变量
        :return:
        """
        print("开始执行~~~")
        result = old_function(*args, **kwargs)
        print("结束执行~~~")
        return result

    # 返回生成的新函数
    return new_function

对装饰器函数build_function()的运用。对add()函数进行扩展:

result_function = build_function(add)
print(result_function(4, 5))

还可以简化对装饰器函数的使用:

# 简化调用装饰器函数的过程
@build_function
def mul(a,b):
    """
    这是被装饰器函数build_function()进行过扩展后的新函数
    :param a:
    :param b:
    :return:
    """
    print('a * b =', a * b)

# 调用被扩展后的mul()函数
mul(45,67)
posted @ 2022-06-12 18:39  Na氢氧  阅读(16)  评论(0编辑  收藏  举报