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

装饰器函数:使用Python中的装饰器函数实现函数增强

发布时间:2023-07-06 11:46:09

装饰器函数是一种在不修改原函数代码的情况下增加其功能的方法。它可以将一个函数作为输入,并返回一个新的函数,这个新函数可以在原函数执行前后执行额外的代码。装饰器函数可以用于增强函数的功能,如添加日志记录、输入检查、权限验证等。

在Python中,装饰器函数使用@符号来应用到一个函数上。下面是一个示例,演示了如何使用装饰器函数来实现函数增强:

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print("Calling function: {}".format(func.__name__))
        result = func(*args, **kwargs)
        print("Function {} finished".format(func.__name__))
        return result
    return wrapper

@log_decorator
def my_function():
    print("Executing my_function")

my_function()

在上面的例子中,log_decorator是一个装饰器函数,它接受一个函数作为输入,并返回一个新的函数wrapperwrapper函数包装了原函数my_function,在执行原函数之前和之后打印一些信息。然后,我们使用@log_decorator语法将装饰器函数应用到my_function上。

当我们调用my_function时,实际上是调用了包装后的wrapper函数。wrapper函数在执行原函数之前打印了一条日志,然后执行原函数,最后再打印一条日志。这样,我们就成功地增强了my_function的功能。

装饰器函数还可以带有参数。例如,我们可以编写一个统计程序执行时间的装饰器函数:

import time

def timer_decorator(repeat=1):
    def decorator(func):
        def wrapper(*args, **kwargs):
            total_time = 0
            for _ in range(repeat):
                start_time = time.time()
                result = func(*args, **kwargs)
                end_time = time.time()
                total_time += end_time - start_time
            average_time = total_time / repeat
            print("Function {} took average {} seconds to execute".format(func.__name__, average_time))
            return result
        return wrapper
    return decorator

@timer_decorator(repeat=3)
def my_function():
    time.sleep(1)

my_function()

在上面的例子中,timer_decorator是一个接受参数的装饰器函数,它返回一个装饰器函数decoratordecorator函数包装了原函数,并在执行前后计算函数执行的平均时间。通过在@timer_decorator(...)语法中传递参数,我们可以指定重复执行原函数的次数。在这个例子中,我们设置重复执行3次,并计算平均时间。

总结来说,装饰器函数是Python中一种强大且灵活的工具,可以用于增强函数的功能。它能够在不修改原函数代码的情况下,通过包装函数来添加额外的处理逻辑。装饰器函数的使用方式简单明了,可以轻松实现函数增强。