Python函数的装饰器
发布时间:2023-12-02 23:52:27
装饰器是Python中一种非常重要且强大的功能,通过装饰器,可以在不修改原函数代码的情况下,对函数进行扩展和增强。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。
在Python中,装饰器常用于在函数执行前后添加额外的代码逻辑,比如日志记录、性能统计、权限控制等。装饰器相比于在函数内部直接添加相关代码,具有更高的可重用性和扩展性。
下面是一个简单的装饰器示例,用于记录函数的执行时间:
import time
def performance(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f'{func.__name__} executed in {end_time - start_time} seconds')
return result
return wrapper
@performance
def my_function():
time.sleep(1)
return 'Done'
my_function()
在此示例中,performance函数就是一个装饰器。它接受一个函数作为参数func,并返回一个新的函数wrapper。wrapper函数内部记录了函数执行前后的时间,并在执行结束后打印出来。
使用装饰器时,只需要在需要装饰的函数上方加上@装饰器名即可。在上述示例中,@performance语句就是装饰器的使用方式。
装饰器可以传递参数。如果装饰器需要接受参数,可以在装饰器函数的外面再包一层函数,用来接收参数并返回装饰器函数。示例如下:
def logging(log_level):
def decorator(func):
def wrapper(*args, **kwargs):
print(f'{func.__name__} is called with log level {log_level}')
return func(*args, **kwargs)
return wrapper
return decorator
@logging(log_level='INFO')
def my_function():
return 'Done'
my_function()
在此示例中,logging函数返回了一个装饰器函数decorator,而decorator函数返回了实际的装饰器函数wrapper。通过这样的层层嵌套,可以实现带参数的装饰器。
以上是对Python函数装饰器的简介和示例说明。装饰器是Python中非常强大的特性,可以帮助我们实现代码的增强和扩展,提高代码的可重用性和可维护性。在实际开发中,我们可以根据需求自定义各种各样的装饰器,来实现所需的功能。
