Python函数:使用装饰器函数增强函数功能
发布时间:2023-06-29 13:44:37
Python中的装饰器函数是一种语法糖,它可以用于在不修改原函数代码的情况下增强函数的功能。装饰器函数实际上是一个闭包函数,它接受一个函数作为参数,并返回一个新的函数。
装饰器函数可以用来实现一些常用的功能,比如日志记录、性能分析、缓存等。下面我们就来介绍一些常见的装饰器函数。
1. 记录日志:装饰器可以用来记录函数的调用日志,以便排查问题或分析性能。我们可以在装饰器函数中添加一些代码,比如打印函数名称和参数,记录函数的执行时间等。
import time
def log(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
@log
def add(a, b):
return a + b
print(add(1, 2))
2. 缓存结果:装饰器可以用来缓存函数的结果,避免重复计算。我们可以使用一个字典来保存函数的参数和对应的结果,每次调用函数时,先检查结果是否已经缓存,如果是则直接返回缓存的结果,如果否则计算结果并缓存。
def cache(func):
results = {}
def wrapper(*args, **kwargs):
key = str(args) + str(kwargs)
if key in results:
return results[key]
else:
result = func(*args, **kwargs)
results[key] = result
return result
return wrapper
@cache
def fib(n):
if n <= 1:
return n
else:
return fib(n-1) + fib(n-2)
print(fib(10))
3. 验证权限:装饰器可以用来验证用户的权限,确保用户有权访问某个函数或页面。我们可以在装饰器函数中添加一些权限验证的代码,比如检查用户是否登录、是否有访问权限等。
def login_required(func):
def wrapper(*args, **kwargs):
if not is_logged_in():
return "请先登录"
else:
return func(*args, **kwargs)
return wrapper
@login_required
def admin_page():
return "管理员页面"
print(admin_page())
装饰器函数的灵活性和可重用性使得它成为Python中非常强大的功能增强工具。通过使用装饰器,我们可以在不修改原函数代码的情况下,实现各种功能的增强,使代码更加简洁、优雅。
