「Python函数」——如何使用装饰器增强函数功能?
发布时间:2023-12-03 03:14:23
装饰器是Python语言中一种强大的机制,它可以在不修改原函数代码的情况下,增加函数的功能或者修改函数的行为。使用装饰器可以提高代码的可重用性,使代码具有更好的可读性和可维护性。本文将介绍如何使用装饰器增强函数的功能。
首先,定义一个简单的函数,以便演示装饰器的用法:
def add(a, b):
return a + b
装饰器其实就是一个函数,它接受一个函数作为参数,并返回一个新的函数。
一、增强函数功能的装饰器
1. 打印函数执行时间的装饰器
用于计算函数的执行时间,并打印出来。
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"函数 {func.__name__} 执行时间:{end_time - start_time} 秒")
return result
return wrapper
通过在函数定义前面加上 @timer,即可使用装饰器来增强函数的功能:
@timer
def add(a, b):
return a + b
2. 打印函数调用日志的装饰器
用于打印函数的调用信息,包括函数名和参数。
def logger(func):
def wrapper(*args, **kwargs):
print(f"调用函数 {func.__name__},参数:{args}, {kwargs}")
result = func(*args, **kwargs)
return result
return wrapper
通过在函数定义前面加上 @logger,即可使用装饰器来增强函数的功能:
@logger
def add(a, b):
return a + b
3. 检查函数参数类型的装饰器
用于检查函数的参数类型是否正确。
def check_type(func):
def wrapper(*args, **kwargs):
if not all(isinstance(arg, int) for arg in args):
raise TypeError("参数类型错误,需要整数")
if not all(isinstance(value, int) for value in kwargs.values()):
raise TypeError("参数类型错误,需要整数")
result = func(*args, **kwargs)
return result
return wrapper
通过在函数定义前面加上 @check_type,即可使用装饰器来增强函数的功能:
@check_type
def add(a, b):
return a + b
二、带参数的装饰器
装饰器本身也可以接受参数,这样可以根据不同的参数值扩展装饰器的功能。
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
通过在函数定义前面加上 @repeat(3),即可使用带参数的装饰器来增强函数的功能,该装饰器将会重复执行函数3次:
@repeat(3)
def add(a, b):
return a + b
以上就是使用装饰器增强函数功能的方法。装饰器可以根据需要添加多个,也可以对同一个函数添加多个装饰器。装饰器提供了一种简洁而强大的方式来扩展函数的功能,使代码更加灵活和易于维护。
