回调函数用起来比较爽。特别是在js中,满世界全是回调,那么在python中,怎么来优雅地实现自己的回调函数呢

下面贴一个我写的例子
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 = callback
resp = 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()
其实就是通过kwargs获取到callback的对象/字符串,然后通过getattr(self, callback)来反射得到回调的方法,然后调用即可。
接着可以进一步抽象,增加回调方法的复用,于是BaseHandler可以改写成装饰器方式
def callback(f):
def wrapper(obj, *args, **kwargs):
resp = f(obj, *args, **kwargs)
if kwargs.get('callback'):
mcallback = kwargs['callback']
if isinstance(callback, basestring) and hasattr(obj, mcallback):
func = getattr(obj, mcallback)
elif hasattr(mcallback, 'im_self') and mcallback.im_self is obj:
func = mcallback
kwargs['callback'] = func.__name__
else:
raise NotImplementedError("self.%s() not implemented!" % callback)
return func(resp)
return wrapper
class BaseHandler(object):
@callback
def crawl(self, url, **kwargs):
url = quote_chinese(_build_url(url.strip(), kwargs.get('params')))
return requests.get(url)
# python
# 回调函数
# 自定义回调函数
# 参数
# python 禁止函数修改列表的实现方法
# Python列表list内建函数用法实例分析【insert、remove、index、pop等】
# Python学习教程之常用的内置函数大全
# python函数中return后的语句一定不会执行吗?
# Python正则表达式常用函数总结
# python3.4用函数操作mysql5.7数据库
# 详谈Python基础之内置函数和递归
# Python入门之三角函数tan()函数实例详解
# 回调
# 自己的
# 是在
# 我写
# 复用
# kwargs
# callback
# crawl
# url
# isinstance
# func
# getattr
# basestring
# hasattr
# def
# pre
# class
# js
# brush
相关文章:
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
建站之星备案流程有哪些注意事项?
Bpmn 2.0的XML文件怎么画流程图
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何登录建站主机?访问步骤全解析
如何通过老薛主机一键快速建站?
小型网站建站如何选择虚拟主机?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
建站之星安装后如何配置SEO及设计样式?
如何在Windows环境下新建FTP站点并设置权限?
C#如何使用XPathNavigator高效查询XML
小程序网站制作需要准备什么资料,如何制作小程序?
如何用腾讯建站主机快速创建免费网站?
韩国服务器如何优化跨境访问实现高效连接?
山东云建站价格为何差异显著?
已有域名如何免费搭建网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何通过FTP空间快速搭建安全高效网站?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
5种Android数据存储方式汇总
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
大型企业网站制作流程,做网站需要注册公司吗?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何用PHP快速搭建高效网站?分步指南
定制建站如何定义?其核心优势是什么?
如何高效搭建专业期货交易平台网站?
制作网站的基本流程,设计网站的软件是什么?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
学校为何禁止电信移动建设网站?
宿州网站制作公司兴策,安徽省低保查询网站?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何快速查询域名建站关键信息?
相册网站制作软件,图片上的网址怎么复制?
微信小程序 input输入框控件详解及实例(多种示例)
如何快速搭建支持数据库操作的智能建站平台?
如何用狗爹虚拟主机快速搭建网站?
淘宝制作网站有哪些,淘宝网官网主页?
全景视频制作网站有哪些,全景图怎么做成网页?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
c# 服务器GC和工作站GC的区别和设置
如何做网站制作流程,*游戏网站怎么搭建?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
建站主机选择指南:服务器配置与SEO优化实战技巧
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何快速建站并高效导出源代码?
如何使用Golang table-driven基准测试_多组数据测量函数效率
*请认真填写需求信息,我们会在24小时内与您取得联系。