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

Python函数中的装饰器的定义和使用方法

发布时间:2023-12-03 02:27:52

装饰器是Python中一种用于增强现有函数功能的特殊语法结构。它可以在不修改现有函数代码的情况下,为函数添加一些额外功能或行为。装饰器通过将函数作为参数传递给装饰器函数,并返回一个新函数来实现。

定义一个装饰器可以使用 Python 中的 @ 语法糖。下面是一个简单的装饰器的例子,用于在函数执行前后打印一条日志:

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

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

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

在上面的例子中,log_decorator 是装饰器函数,它接受一个函数作为参数,并返回一个新函数 wrapperwrapper 函数在调用被装饰的函数之前和之后打印日志。

修饰器作为装饰器函数的子函数实现。

常用可以在装饰器内添加如下代码来保留原有函数的元信息:

import functools

def log_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Calling function {func.__name__} with arguments {args} {kwargs}")
        result = func(*args, **kwargs)
        print(f"Function {func.__name__} returned {result}")
        return result
    return wrapper

在上述例子中,使用了 functools.wraps 函数装饰器来保留原有函数名称和文档字符串等元信息。

除了装饰器语法糖,我们也可以手动使用装饰器来装饰函数。下面是一个手动使用装饰器的例子:

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

add = log_decorator(add)

在上面的例子中,我们将装饰器函数 log_decorator 应用于被装饰的函数 add

总结一下,装饰器是一种用于增强现有函数功能的特殊语法结构。它通过将被装饰的函数作为参数传递给装饰器函数,并返回一个新函数来实现。装饰器可以通过 @ 语法糖或手动方式应用于函数。装饰器提供了一种灵活的方式来修改函数行为,并可以用于日志记录、性能分析和缓存等场景。