首先我们先来介绍什么是Python装饰器。
什么是Python装饰器
Python中的装饰器是一种用于修改函数、类或者模块等 Python 可调用对象(callable object)的标准 Python 语法结构。装饰器是通过在原有函数增加代码来实现的,其不会修改源代码,而是返回一个被装饰后的函数对象。
装饰器的作用:将一个函数的功能和逻辑进行包装或扩展,将异常处理、日志记录等通用操作从业务逻辑中分离出来,提高代码的可重用性和简洁性。
装饰器的定义与用法
装饰器的定义方法如下:
def decorator_function(original_function):
# 在这里定义装饰器函数,对原有函数进行包装、扩展
def wrapper_function(*args, **kwargs):
# 在这里增加装饰器代码
return original_function(*args, **kwargs)
return wrapper_function
装饰器函数中一般会内嵌一个包装函数 wrapper_function,该函数将原函数的参数进行接收,装饰器函数对原函数进行功能包装和扩展,并返回包装后的函数对象。
使用装饰器可以使用 @
符号将装饰器函数应用到目标函数之前,如下面这个例子:
@decorator_function
def target_function():
pass
以上即为装饰器的基本定义和使用方法。
示例说明
下面我们来看两个实际示例,更好地理解装饰器的使用方法及其威力。
示例一:计时器
一个计时器装饰器,记录目标函数的执行时间。
import time
def timer_decorator(function):
def wrapper(*args, **kwargs):
start_time = time.time()
result = function(*args, **kwargs)
end_time = time.time()
print(f"函数 {function.__name__} 运行时间:{end_time - start_time} 秒")
return result
return wrapper
@timer_decorator
def countdown(n):
while n > 0:
n -= 1
countdown(1000000)
结果输出:
函数 countdown 运行时间:0.057991981506347656 秒
如上,我们在 countdown 函数前面使用了 @timer_decorator 装饰器,用来统计函数执行时间。最后运行该函数时输出了该函数的执行时间。
示例二:日志记录器
一个日志记录器装饰器,记录目标函数调用的详细信息和结果。
def logger_decorator(function):
import logging
logging.basicConfig(level=logging.DEBUG)
def wrapper(*args, **kwargs):
logging.info(f'调用函数: {function.__name__},参数: {args}, {kwargs}')
result = function(*args, **kwargs)
logging.info(f'函数结果: {result}')
return result
return wrapper
@logger_decorator
def multiply(x, y):
return x * y
multiply(3, 4)
结果输出:
调用函数: multiply,参数: (3, 4), {}
函数结果: 12
如上,我们在 multiply 函数前面使用了 @logger_decorator 装饰器,用来记录函数调用时的详细信息和结果。运行该函数时输出日志记录的结果。
这两个示例是装饰器的基本使用方法,装饰器使用灵活度很高,可以实现各种不同的功能,如实现缓存、实现特定操作等等。
希望以上内容对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python装饰器(decorator)定义与用法详解 - Python技术站