装饰器-函数的增强
装饰器是 Python 中非常强大的功能,可以通过装饰器来增强函数的功能。在函数的定义之前使用 @ 符号来调用装饰器,装饰器类似于一个包装器,它将包装的函数进行修改或者增强,然后将修改后的函数返回。
装饰器可以给函数提供额外的功能,比如:日志记录、性能测试、输入验证等等。当我们想要给多个函数添加相同的功能时,可以使用装饰器来实现,可以简化代码,提高代码的复用性和可维护性。
一个简单的装饰器示例如下:
def decorator(func):
def wrapper(*args, **kwargs):
# 在函数调用前增加的功能
print("函数调用前的操作")
result = func(*args, **kwargs)
# 在函数调用后增加的功能
print("函数调用后的操作")
return result
return wrapper
@decorator
def hello():
print("Hello, World!")
hello()
在这个示例中,我们定义了一个装饰器 decorator,它接受一个函数作为参数,返回一个新的函数 wrapper。新的函数 wrapper 在函数调用前会打印一行文本,然后调用原函数 func,再打印一行文本,最后返回结果。
使用装饰器可以将 decorator 应用到 hello 函数上,这样当调用 hello 函数时,会先执行装饰器中的逻辑,然后再执行 hello 函数的逻辑。
装饰器还可以传递参数,用于指定不同的行为。例如,我们可以定义一个装饰器来记录函数的执行时间,代码如下:
import time
def record_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
execution_time = end_time - start_time
print(f"函数 {func.__name__} 的执行时间为:{execution_time} 秒")
return result
return wrapper
@record_time
def long_running_task():
# 模拟一个耗时较长的操作
time.sleep(2)
print("任务执行完成")
long_running_task()
在这个示例中,我们定义了一个装饰器 record_time,它接受一个函数作为参数,返回一个新的函数 wrapper。新的函数 wrapper 在函数调用前记录开始时间,然后调用原函数 func,再记录结束时间,计算函数的执行时间,并打印出来。
使用装饰器可以将 record_time 应用到 long_running_task 函数上,这样当调用 long_running_task 函数时,会先执行装饰器中的逻辑,然后再执行 long_running_task 函数的逻辑。最后,在控制台上打印出函数的执行时间。
通过使用装饰器,我们可以轻松地为函数添加各种不同的功能。装饰器将原函数包装在另一个函数中,并在这个包装函数中进行修改或者增强。这样一来,我们可以通过不同的装饰器来实现不同的功能,而不需要修改原函数的代码。同时,装饰器还可以提高代码的可读性和可维护性,使代码更加简洁和优雅。
