回调的实际应用
实现回调机制
同步回调处理
def process_data(data, transform_callback):
"""
使用提供的转换回调处理数据
"""
processed_results = []
for item in data:
processed_results.append(transform_callback(item))
return processed_results
## 示例用法
def square_transform(x):
return x ** 2
numbers = [1, 2, 3, 4, 5]
squared_numbers = process_data(numbers, square_transform)
print(squared_numbers) ## 输出:[1, 4, 9, 16, 25]
异步回调处理
import time
import threading
def async_task(callback):
"""
模拟一个带回调的异步任务
"""
def worker():
time.sleep(2) ## 模拟长时间运行的任务
result = "任务成功完成"
callback(result)
thread = threading.Thread(target=worker)
thread.start()
def result_handler(message):
print(f"收到:{message}")
## 执行异步任务
async_task(result_handler)
回调设计模式
观察者模式实现
graph TD
A[主题] --> |通知| B[观察者1]
A --> |通知| C[观察者2]
A --> |通知| D[观察者3]
class EventManager:
def __init__(self):
self._listeners = {}
def subscribe(self, event_type, listener):
if event_type not in self._listeners:
self._listeners[event_type] = []
self._listeners[event_type].append(listener)
def unsubscribe(self, event_type, listener):
self._listeners[event_type].remove(listener)
def dispatch(self, event_type, data):
if event_type in self._listeners:
for listener in self._listeners[event_type]:
listener(data)
## 使用示例
def log_event(data):
print(f"日志:{data}")
def alert_event(data):
print(f"警报:{data}")
event_manager = EventManager()
event_manager.subscribe("错误", log_event)
event_manager.subscribe("错误", alert_event)
event_manager.dispatch("错误", "系统故障")
回调性能考量
技术 |
优点 |
缺点 |
直接回调 |
实现简单 |
错误处理有限 |
线程回调 |
非阻塞执行 |
线程管理开销大 |
Async/Await |
代码简洁、易读 |
需要 Python 3.5+ |
高级回调技术
基于装饰器的回调
def retry_callback(max_attempts=3):
def decorator(func):
def wrapper(*args, **kwargs):
attempts = 0
while attempts < max_attempts:
try:
return func(*args, **kwargs)
except Exception as e:
attempts += 1
if attempts == max_attempts:
raise
return None
return wrapper
return decorator
@retry_callback(max_attempts=3)
def unreliable_function():
## 模拟不可靠操作
import random
if random.random() < 0.7:
raise ValueError("随机失败")
return "成功"
回调中的错误处理
全面的错误管理
def safe_callback_executor(callback, *args, **kwargs):
try:
return callback(*args, **kwargs)
except Exception as e:
print(f"回调执行错误:{e}")
return None
def example_callback(x, y):
return x / y
result = safe_callback_executor(example_callback, 10, 0)
最佳实践
- 保持回调简洁且专注
- 处理潜在异常
- 避免深度回调嵌套
- 考虑使用现代异步技术
- 清晰记录回调预期
通过掌握这些实用的回调技术,开发者可以在 LabEx 开发环境中利用函数式编程范式的强大功能,创建更灵活、响应性更强的 Python 应用程序。