装饰器是一个特殊的函数,它接受一个函数作为参数,并返回一个新的函数。
通过使用装饰器,可以在不修改原始函数代码的情况下扩展其功能,增加代码的灵活性和可维护性。
装饰器在定义之后立即跟在需要被装饰的函数的定义之前,使用@
符号。
- 目的:装饰函数,既修改或增强函数的行为
- 作用对象:函数
- 调用方式:自动应用于目标函数,不需要直接调用
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!"。