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

Python装饰器掌握Python中的装饰器函数及其作用

发布时间:2023-08-31 22:48:28

Python中的装饰器函数是一种特殊的函数,可以用来修改或扩展其他函数的功能。装饰器函数可以在不改变原函数代码的情况下,对函数进行包装,从而添加新的功能。

装饰器函数的作用有以下几个方面:

1. 扩展函数功能:装饰器函数可以在不修改原函数代码的情况下,给函数添加一些额外的功能。例如,可以用装饰器函数来计算函数的执行时间,或者给函数添加日志输出等功能。

2. 实现代码复用:装饰器函数可以被多个函数共享,从而实现代码的复用。这样,我们只需要定义一个装饰器函数,就可以在多个函数中使用它。

3. 分离关注点:装饰器函数可以将函数的核心功能与附加功能分离开来。这样,函数只需要关注自己的核心逻辑,而附加功能可以由装饰器函数来实现。

下面是一个简单的示例,演示如何使用装饰器函数来计算函数的执行时间:

import time

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

@calculate_exec_time
def my_function():
    time.sleep(1)

my_function()

在上面的代码中,calculate_exec_time 是一个装饰器函数。它接受一个函数作为参数,并返回一个新的函数 wrapperwrapper 函数在执行原函数之前记录开始时间,在执行原函数之后记录结束时间,并计算出函数的执行时间。最后,装饰器函数输出函数的执行时间。

通过在需要计算执行时间的函数前面添加 @calculate_exec_time,就可以将函数传递给装饰器函数,并自动应用装饰器的功能。在上面的例子中,当调用 my_function() 时,会先执行 calculate_exec_time(my_function),然后返回一个新的函数对象,再调用这个新函数就会输出函数的执行时间。

这个示例展示了装饰器函数的主要特点:装饰器函数接收一个函数作为参数,返回一个新的函数对象,用于代替原函数的调用。装饰器函数可以在不改变原函数代码的情况下,添加额外的功能。