装饰器是一个特殊的函数,它接受一个函数作为参数,并返回一个新的函数。
通过使用装饰器,可以在不修改原始函数代码的情况下扩展其功能,增加代码的灵活性和可维护性。
装饰器在定义之后立即跟在需要被装饰的函数的定义之前,使用@
符号。
def greet(name):
print(f"Hello, {name}!")
# 使用装饰器来增强这个函数的行为,添加一个计时功能:
import time
def timing_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.")
return result
return wrapper
# 使用装饰器
@timing_decorator
def greet(name):
time.sleep(1) # 假设这个函数需要一些时间来完成
print(f"Hello, {name}!")
# 调用greet函数
greet("Alice")
输出为:
Hello, Alice!
Function greet took 1.00xxxx seconds to execute.
Function greet took
这行代码是装饰器timing_decorator
中wrapper
函数打印的,用于显示函数greet
的执行时间。
首先,greet
函数内部的time.sleep(1)
会让程序暂停1秒来模拟函数执行需要一些时间。
然后,wrapper
函数计算了函数执行前后的时间差,并打印出来。
最后,wrapper
函数返回了greet
函数的执行结果,即打印"Hello, Alice!"。