在Python中,回调函数是一种常见的编程模式,它允许一个函数(通常称为回调函数)被传递给另一个函数,并在适当的时候被调用。回调函数通常用于异步编程,允许程序在等待某些操作完成时继续执行其他任务。
同步回调函数
def my_callback(input):print("function my_callback was called with %s input" % input)def caller(input, func):func(input)for i in range(5):caller(i, my_callback)
异步回调函数
def handler(x):print("The result is %s" % x)def add(a, b):return a + bdef task_async(func, args, callback=None):result = func(*args)callback(result)if __name__ == "__main__":task_async(add, (2, 3), callback=handler)
带外部状态的回调函数
class RequestHandler:def __init__(self):self.sequence = 0def handler(self, result):self.sequence += 1print("[{}] Got: {}".format(self.sequence, result))def add(a, b):return a + bdef task_async(func, args, *, callback=None):result = func(*args)callback(result)if __name__ == "__main__":handler_instance = RequestHandler()task_async(add, (2, 3), callback=handler_instance.handler)
使用装饰器实现回调
class BaseHandler(object):def crawl(self, url, kwargs):if kwargs.get('callback'):callback = kwargs['callback']if isinstance(callback, basestring) and hasattr(self, callback):func = getattr(self, callback)elif hasattr(callback, 'im_self') and callback.im_self is self:func = callbackresp = requests.get(url)return func(resp)class Anjuke(BaseHandler):def on_start(self):self.crawl(start_url, callback=self.index_url)def index_url(self, response):print(response.text)a = Anjuke()print(a.on_start())
生成随机数并打印的回调函数示例
import random as rddef newRN(fn):ns = []for i in range(10):n = round(rd.random(), 2)ns.append(n)fn(ns)def abc(*args):print("生成数据成功")print(args)newRN(abc)
这些示例展示了如何在Python中实现不同类型的回调函数,包括同步和异步回调,以及如何使用装饰器来简化回调函数的实现。回调函数是Python中一个强大的特性,可以用于多种场景,包括事件处理、异步编程等

