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

了解Python中的装饰器函数-为函数添加额外功能

发布时间:2023-06-29 23:34:16

装饰器函数是Python中一种非常有用的特性,它允许我们在不修改原函数代码的情况下,为函数添加额外的功能或行为。装饰器函数实际上是一个高阶函数,它接受一个函数作为参数,并返回一个新的函数。

装饰器函数在函数的定义之前使用@符号,并将其放在需要装饰的函数的上方。当我们调用被装饰的函数时,实际上调用的是装饰器函数返回的新函数。

下面我们来看一个简单的装饰器函数的例子,它用来计算函数的执行时间:

import time

def calculate_time(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"函数 {func.__name__} 的执行时间为:{end_time - start_time} 秒")
        return result
    return wrapper

@calculate_time
def my_function():
    time.sleep(2)

my_function()

在上面的代码中,我们定义了一个装饰器函数calculate_time,它接收一个函数作为参数,并返回一个新的函数wrapper。新的函数wrapper在计算执行时间之前先调用了原来的函数func

然后,在我们要计时的函数my_function的定义上方使用装饰器函数@calculate_time,这样在每次调用my_function时,实际上是调用了装饰器函数返回的新函数wrapper

运行上面的代码会输出如下结果:

函数 my_function 的执行时间为:2.0039122104644775 秒

我们可以看到,被装饰的函数my_function在执行之前和之后分别打印了一条消息,并计算了执行时间。

除了计算执行时间之外,我们还可以使用装饰器函数实现其他各种功能,比如权限校验、日志记录、缓存等等。装饰器函数为我们提供了一种非常灵活和可扩展的方式,在不修改原函数的代码的情况下,为函数添加额外的功能。

需要注意的是,装饰器函数对于传递参数和返回值是非常灵活的。装饰器函数可以接受任意类型的参数,并返回任意类型的值。这使得我们可以根据具体的需求,为装饰器函数添加各种灵活的功能和行为。