深入理解Python函数装饰器及常见应用场景
发布时间:2023-06-24 21:59:34
Python函数装饰器是一种将函数作为参数并返回一个新函数的高级技术。装饰器可以方便快捷地修改或扩展函数的功能,从而实现代码的复用和高效开发。
常见应用场景:
1. 计时器
任何需要计算函数运行时间的任务都可以使用计时器装饰器。下面是一个简单的计时器装饰器的实现:
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print('函数 {} 运行时间:{}'.format(func.__name__, end_time-start_time))
return result
return wrapper
可以将计时器装饰器用于需要计算运行时间的任何函数上:
@timer
def example_function():
time.sleep(5)
2. 日志记录
将日志记录功能嵌入到函数中,可以方便地跟踪函数的运行情况或记录异常。下面是一个简单的日志记录器装饰器的实现:
def logger(func):
import logging
logging.basicConfig(filename='example.log', level=logging.INFO)
def wrapper(*args, **kwargs):
logging.info('函数 {} 开始运行'.format(func.__name__))
result = func(*args, **kwargs)
logging.info('函数 {} 运行结束'.format(func.__name__))
return result
return wrapper
可以将日志记录器装饰器用于需要记录日志的任何函数上:
@logger
def example_function():
print('Hello World')
3. 权限控制
将权限控制功能嵌入到函数中,可以限制只有特定用户或用户组才能执行该函数。下面是一个简单的权限控制装饰器的实现:
def check_permission(func):
def wrapper(*args, **kwargs):
user = get_current_user() # 获取当前用户
if user.is_admin: # 如果用户是管理员,则允许执行
return func(*args, **kwargs)
else: # 否则返回权限错误提示
return '权限错误:非管理员用户无法执行该函数'
return wrapper
可以将权限控制装饰器用于需要进行权限控制的函数上:
@check_permission
def example_function():
print('Only admins can execute this function!')
Python函数装饰器是一种强大的编程技术,可以大大简化代码的编写和维护工作。在使用装饰器时,需要注意装饰器和被装饰函数的参数和返回值类型保持一致,以避免出现不必要的错误或异常。
