Python中还有哪些其他类型的装饰性代码示例?
时间: 2024-09-27 07:10:06 浏览: 28
python 使用装饰器并记录log的示例代码
在Python中,装饰器是一种特殊类型的函数,它可以修改或增强其他函数的功能,而不需要改变原函数的源码。除了用于实现权限控制、日志记录、性能分析等功能的实用装饰器之外,还有一些常见的装饰性代码示例,比如:
1. **计时器**:可以创建一个装饰器来计算函数执行的时间。
```python
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__}运行时间: {end_time - start_time}s")
return result
return wrapper
@timer_decorator
def my_function(n):
time.sleep(n)
my_function(2) # 输出函数执行时间
```
2. **缓存**:如果某个函数的结果不会改变,可以使用装饰器存储结果,避免重复计算。
```python
def cache_decorator(func):
results = {}
def wrapper(*args):
if args not in results:
results[args] = func(*args)
return results[args]
return wrapper
@cache_decorator
def fibonacci(n):
if n < 2:
return n
else:
return fibonacci(n - 1) + fibonacci(n - 2)
fibonacci(10) # 第一次会计算,之后再调用会从缓存中取值
```
3. **日志记录**:装饰器可用于收集和显示函数调用的信息。
```python
import logging
def log_decorator(func):
def wrapper(*args, **kwargs):
logging.info(f"Calling {func.__name__} with arguments: {args}, {kwargs}")
result = func(*args, **kwargs)
logging.info(f"{func.__name__} returned: {result}")
return result
return wrapper
@log_decorator
def greet(name):
print(f"Hello, {name}!")
greet("Alice") # 打印日志信息
```
阅读全文