Python函数的装饰器:增强函数功能和调用方式
发布时间:2023-10-27 14:11:10
Python中的装饰器是一种特殊的函数,用于增强其他函数的功能和调用方式。装饰器可以在不修改原函数代码的情况下,为函数提供额外的功能。
装饰器的使用方式如下:
@装饰器函数
def 原函数():
pass
装饰器函数是一个接受一个函数作为参数并返回一个新函数的函数。装饰器函数可以在原函数的调用前后执行额外的操作,比如打印日志、计时等。
装饰器的使用可以大大简化代码,提高代码的可读性和可维护性。下面我们介绍几个常见的装饰器用法。
1. 打印日志
装饰器可以用于在函数调用前后打印日志信息,方便调试和排查问题。下面是一个简单的打印日志的装饰器示例:
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__}")
result = func(*args, **kwargs)
print(f"Finished {func.__name__}")
return result
return wrapper
@log_decorator
def add(a, b):
return a + b
print(add(2, 3))
运行结果如下:
Calling add Finished add 5
2. 计时器
装饰器可以用于计算函数的执行时间,方便性能优化和代码的性能评估。下面是一个简单的计时器装饰器示例:
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} executed in {end_time - start_time} seconds")
return result
return wrapper
@timer_decorator
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10))
运行结果如下:
fibonacci executed in 0.0041196346282958984 seconds 55
3. 权限验证
装饰器可以用于验证用户的权限,限制只有具有特定权限的用户才能访问某些函数。下面是一个简单的权限验证的装饰器示例:
def allowed_users_decorator(func):
def wrapper(user, *args, **kwargs):
if user.is_authenticated():
return func(user, *args, **kwargs)
else:
raise PermissionError("Permission denied")
return wrapper
@allowed_users_decorator
def view_profile(user):
print(f"Viewing profile of {user.username}")
user = User(username="Alice", is_authenticated=True)
view_profile(user)
运行结果如下:
Viewing profile of Alice
装饰器是Python中一种强大而灵活的机制,通过装饰器可以在不修改原函数代码的情况下,为函数提供额外的功能和调用方式。通过合理的使用装饰器,可以提高代码的可读性、可维护性和性能。
