装饰器函数:使用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是一个装饰器函数,它接受一个函数作为输入,并返回一个新的函数wrapper。wrapper函数包装了原函数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是一个接受参数的装饰器函数,它返回一个装饰器函数decorator。decorator函数包装了原函数,并在执行前后计算函数执行的平均时间。通过在@timer_decorator(...)语法中传递参数,我们可以指定重复执行原函数的次数。在这个例子中,我们设置重复执行3次,并计算平均时间。
总结来说,装饰器函数是Python中一种强大且灵活的工具,可以用于增强函数的功能。它能够在不修改原函数代码的情况下,通过包装函数来添加额外的处理逻辑。装饰器函数的使用方式简单明了,可以轻松实现函数增强。
