在Python中,回调函数是一种常见的编程模式,它允许一个函数在某个事件发生时被调用。以下是如何在Python中使用回调函数的一些示例:
基本使用
def func1(func2):func2()def func2():print('我是func2函数')func1(func2) 输出:我是func2函数
带参数的回调函数
def ser1(a):return a * 100def ser2(b):return b * 20def ser(ser1, a, ser2, b):print(ser1(a) + ser2(b))ser(ser1, 1, ser2, 1) 输出:102
使用`concurrent.futures`模块
from concurrent.futures import ThreadPoolExecutordef callback(result):print('任务完成,结果为:', result)def task(x, y):return x + ywith ThreadPoolExecutor() as executor:future = executor.submit(task, 2, 3)future.add_done_callback(callback) 当任务完成时,回调函数会被执行
面向对象的回调实现
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())
使用`apply_async`和`Callable`
def apply_async(func, args=(), callable=None):result = func(*args)if callable:callable(result)def print_result(result):print('Got:', result)def add(x, y):return x + yapply_async(add, args=(2, 3), callable=print_result) 输出:Got: 5
使用`ResultHandler`类
class ResultHandler:def __init__(self):self.sequence = 0def handler(self, result):self.sequence += 1print('[{}] Got:{}'.format(self.sequence, result))rh = ResultHandler()rh.handler(10) 输出: Got:10rh.handler(20) 输出: Got:20
示例:使用`call.py`和`called.py`
call.pyimport calleddef callback():print('in callback')def main():called.test_call(callback)print('in call.py')main()called.pydef test():print('in called.py test')def test_call(p_call):print('in called.py test_call')p_call()if __name__ == '__main__':test_call(callback) 输出:in called.py test_call in callback
这些示例展示了如何在Python中实现和使用回调函数。回调函数可以用于多种场景,如异步编程、事件驱动编程等。希望这些示例能帮助你理解Python中回调函数的使用方式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://sigusoft.com/bj/23675.html