欢迎访问宙启技术站
智能推送

使用Python编写装饰器以增加函数功能

发布时间:2023-07-02 12:35:21

装饰器是一种在不改变被装饰函数源代码的情况下,为函数添加额外功能的方法。在Python中,装饰器是一种高级编程技巧,可以提高代码的可重用性和可维护性。

装饰器的用法非常广泛,例如可以用来添加日志、计时、缓存等功能。下面我将介绍如何使用Python编写一个装饰器来增加函数的功能。

首先,我们来定义一个简单的函数,该函数用于计算两个数的和:

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

现在,我们希望在函数执行前后分别打印函数名和参数,以及函数执行的结果。我们可以使用装饰器来实现这个功能。

首先,我们定义一个装饰器函数,该函数接受一个函数作为参数,并返回一个新的函数。在新的函数内部,我们可以实现添加额外功能的代码。

def print_func_info(func):
    def wrapper(*args, **kwargs):
        print(f'Calling function {func.__name__} with args {args} {kwargs}')
        result = func(*args, **kwargs)
        print(f'Function {func.__name__} returned {result}')
        return result
    return wrapper

在上面的装饰器函数中,我们定义了一个内部函数wrapperwrapper函数接受任意数量的位置参数args和关键字参数kwargs,然后在调用被装饰函数之前打印函数名和参数,调用被装饰函数,并在函数执行后打印函数名和返回值。

现在,我们可以使用装饰器来装饰我们的函数add。只需在函数定义前加上@装饰器函数名即可。

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

现在,每次调用add函数时,都会先打印函数名和参数,执行函数后再打印函数名和返回值。我们可以测试一下:

result = add(3, 4)
print(result)

运行以上代码,输出结果为:

Calling function add with args (3, 4) {}
Function add returned 7
7

我们可以看到,装饰器成功地为函数add添加了额外的功能,而不需修改函数本身的源代码。

以上就是使用Python编写装饰器来增加函数功能的方法。通过这种方式,我们可以轻松地为函数添加各种额外的功能,提高代码的可重用性和可维护性。