📅  最后修改于: 2023-12-03 15:33:58.798000             🧑  作者: Mango
在 Python 中,装饰器可以用来修改函数的行为或添加额外的功能。下面我们将介绍如何创建装饰器。
在 Python 中,装饰器是一个函数,它接受一个函数作为参数,并返回一个新的函数,通常包装了原始函数。例如,假设我们有一个函数 func
:
def func():
print("Hello, world!")
我们可以创建一个装饰器,它添加了额外的功能,比如输出函数被调用的时间:
import time
def timer(func):
def wrapper():
start_time = time.time()
func()
end_time = time.time()
print("Time elapsed:", end_time - start_time)
return wrapper
@timer
def func():
print("Hello, world!")
func()
在上面的代码中,我们定义了一个名为 timer
的装饰器函数,它接受一个函数作为参数。然后,定义一个名为 wrapper
的新函数,它调用原始函数,并记录执行时间。最后,我们返回包装了原始函数的新函数,并使用装饰器语法(@timer
)将其应用到函数 func
上。
当我们运行上面的代码时,输出将类似于以下内容:
Hello, world!
Time elapsed: 1.9073486328125e-06
在输出中,我们可以看到原始函数 func
被调用,并且装饰器添加了额外的功能(记录了执行时间)。
我们可以扩展装饰器,使其接受参数,以实现更细粒度的控制。下面我们通过一个示例来演示如何创建带参数的装饰器。
def repeat(num):
def decorator(func):
def wrapper(*args, **kwargs):
for i in range(num):
func(*args, **kwargs)
return wrapper
return decorator
@repeat(num=3)
def func(msg):
print(msg)
func("Hello, world!")
在上面的代码中,我们定义了一个名为 repeat
的装饰器函数,它接受一个整数参数 num
。然后,定义一个名为 decorator
的新函数,它接受一个函数作为参数。然后,定义一个名为 wrapper
的新函数,它调用原始函数多次,次数为 num
。最后,我们返回包装了原始函数的新函数,并使用装饰器语法(@repeat(num=3)
)将其应用到函数 func
上。
当我们运行上面的代码时,输出将类似于以下内容:
Hello, world!
Hello, world!
Hello, world!
在输出中,我们可以看到原始函数 func
被调用了多次,以及装饰器添加了额外的功能(重复执行原始函数)。
在 Python 中,装饰器是一种强大的工具,可以用来修改函数的行为或添加额外的功能。在本文中,我们了解了如何创建装饰器以及如何使用带参数的装饰器。如果你想进一步了解 Python 中的装饰器,请参考 Python 官方文档。