Python装饰器(Decorator)的详细解释和实例使用
发布时间:2023-07-02 07:28:32
Python装饰器是一种用于修改函数或类的功能的语法特性。装饰器本质上是一个函数,接受一个函数作为输入,并返回一个新的函数作为输出。装饰器函数通常在被装饰的函数之前或之后执行一些额外的操作,然后将结果返回。
装饰器的特点是可以在不影响原函数代码的情况下,为其添加额外的功能,比如日志记录、性能统计、参数验证等。装饰器提供了一种灵活且可重用的方式来扩展和修改函数的行为。
以下是一个简单的装饰器的示例,用于记录函数的执行时间:
import time
def timer(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
@timer
def my_function():
time.sleep(2)
my_function()
在上面的示例中,timer 是一个装饰器函数,它接收一个函数作为参数,并返回一个新的函数 wrapper。wrapper 函数在被装饰的函数 my_function 前后执行额外的操作,计算函数执行的时间,并将结果打印出来。我们使用@timer语法将装饰器应用于 my_function,相当于执行了 my_function = timer(my_function)。
执行以上代码,会输出如下的结果:
函数 my_function 的执行时间为 2.0017905235290527 秒
可以看到,装饰器函数成功地添加了额外的功能,而原函数的代码保持不变。
装饰器还可以带有参数,下面是一个接收参数的装饰器示例:
def repeat_n_times(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat_n_times(3)
def greet(name):
print(f"Hello, {name}!")
greet("Alice")
在上面的示例中,repeat_n_times 是一个接收参数的装饰器函数,它返回一个新的装饰器函数 decorator。decorator 函数在被装饰的函数 greet 前后执行额外的操作,即重复执行 greet 函数 n 次。我们使用 @repeat_n_times(3) 将装饰器应用于 greet 函数,相当于执行了 greet = repeat_n_times(3)(greet)。
执行以上代码,会输出如下的结果:
Hello, Alice! Hello, Alice! Hello, Alice!
可以看到,装饰器函数成功地重复执行了被装饰的函数 greet。
