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 是一个装饰器函数。它接受一个函数作为参数,并返回一个新的函数 wrapper。wrapper 函数在执行原函数之前记录开始时间,在执行原函数之后记录结束时间,并计算出函数的执行时间。最后,装饰器函数输出函数的执行时间。
通过在需要计算执行时间的函数前面添加 @calculate_exec_time,就可以将函数传递给装饰器函数,并自动应用装饰器的功能。在上面的例子中,当调用 my_function() 时,会先执行 calculate_exec_time(my_function),然后返回一个新的函数对象,再调用这个新函数就会输出函数的执行时间。
这个示例展示了装饰器函数的主要特点:装饰器函数接收一个函数作为参数,返回一个新的函数对象,用于代替原函数的调用。装饰器函数可以在不改变原函数代码的情况下,添加额外的功能。
