def apply_async(func, args=(), callable=None): """需要调用的回调函数的函数""" result = func(*args) # 元组拆包*args callable(result) def print_result(result): """打印日志信息""" print("Got:", result) def add(x, y): """计算函数""" return x + y class ResultHandler: """第一种 保存内部序列号""" def __init__(self): self.sequence = 0 def handler(self, result): self.sequence += 1 print('[{}] Got:{}'.format(self.sequence, result)) def make_handler(): """第二种 类的替代,可以使用闭包捕获状态值""" sequence = 0 def handler(result): nonlocal sequence # 只能用于嵌套函数中 sequence += 1 print('[{}] Got:{}'.format(sequence, result)) return handler def make_handler_2(): """第三种 使用协程""" sequence = 0 while True: result = yield sequence += 1 print('[{}] Got:{}'.format(sequence, result)) if __name__ == '__main__': apply_async(add, (3, 4), callable=print_result) apply_async(add, ("python", " callable"), callable=print_result) r = ResultHandler() apply_async(add, (2, 3), callable=r.handler) apply_async(add, ('hello', ' world'), callable=r.handler) handler = make_handler() apply_async(add, (2, 3), callable=handler) apply_async(add, ('hello', 'workd'), callable=handler) print('='*50) handler_2 = make_handler_2() next(handler_2) apply_async(add, (2, 3), callable=handler_2.send) apply_async(add, ("hello", 'world'), callable=handler_2.send)
来源:https://www.cnblogs.com/action-go/p/11957527.html