Python装饰器:为函数添加额外功能和属性
发布时间:2023-07-04 02:53:11
Python装饰器是一种特殊的函数,用于在不修改原始函数代码的情况下为函数添加额外的功能和属性。装饰器的作用类似于AOP(面向方面编程),可以动态地修改一个函数或方法的行为。
装饰器的使用方式如下:
@decorator
def function():
pass
装饰器可以理解为一个闭包函数,它接收一个函数作为参数,并返回一个新的函数。装饰器在内部定义了一个包装函数,用于包装原始函数。在包装函数中,可以添加额外的功能,然后再调用原始函数。最后,返回包装函数的引用。
装饰器可以实现以下功能:
1. 添加额外功能:可以在原始函数的前后添加额外的代码逻辑,例如日志记录、性能统计、异常处理等。
def logger(func):
def wrapper(*args, **kwargs):
print(f'Calling function {func.__name__}')
result = func(*args, **kwargs)
print(f'Function {func.__name__} called')
return result
return wrapper
@logger
def add(a, b):
return a + b
add(1, 2) # Output: Calling function add Function add called
2. 修改函数参数或返回值:可以用装饰器修改函数的参数或返回值,例如类型检查、数据转换等。
def convert_data_type(func):
def wrapper(value):
if isinstance(value, str):
value = int(value)
result = func(value)
return result
return wrapper
@convert_data_type
def square(n):
return n * n
print(square("2")) # Output: 4
3. 缓存函数结果:可以用装饰器缓存函数的结果,以提高函数执行效率。
def cache(func):
memo = {}
def wrapper(*args):
if args in memo:
return memo[args]
else:
result = func(*args)
memo[args] = result
return result
return wrapper
@cache
def fibonacci(n):
if n < 2:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # Output: 55
4. 添加属性和方法:可以用装饰器在函数上添加额外的属性和方法。
def add_attribute(func):
func.description = "This is a function."
return func
@add_attribute
def my_function():
pass
print(my_function.description) # Output: This is a function.
总结而言,Python装饰器是一种非常强大的语法特性,可以在不修改原始函数代码的情况下为函数添加额外的功能和属性。通过装饰器,我们可以实现代码的复用和扩展,提高代码的可读性和可维护性。
