python 回调函数和回调方法的实现分析


Posted in Python onMarch 23, 2016

回调与事件驱动
回调函数有比较重要的意义:它在是事件驱动的体现
我们试想一个场景,如果我们触发了某个事件,比如点击事件
那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数
我们就可以在点击事件被触发后(结束后)调用相应的方法来处理后事
比如

普通回调

#在函数中使用回调
def click(callback):
  eval(callback)() #eval()可以讲字符串解析成可以执行的代码

def handle:
  print '在点击事件结束后调用该函数,进行处理,比如弹出框alert()'

if(__name__ == '__main__'):
  fun1('fun2')

上面那个场景很显然是模拟我们日常使用浏览器是的一个场景:
当我们点击某个按钮是,可能会弹出一个警告框或者确认框,这可以理解为
点击事件触发后, 调用了这个处理函数,这个函数的功能就是弹出一个警告框或者确认框
从事件驱动来讲: 点击事件的发送驱动这handle处理程序的触发
恩,这样会不会比较清晰?

类中使用回调
因为python从一开始就是面向对象的定位,所以作为python 程序员, 可能会面对如下的场景:
我们创建一个实例, 我们传入数据给这个实例,最后得到我们我们想要的结果,比如我们传给
一个名为 getCsdnTitle的对象一个url(一篇csdn博客的url),我们希望最后得到这篇文章的文字内容,
我们是不是首先地通过http请求获取该url 对应的html内容,给这个方法命名为fetch_url()
然后我们需要对html进行处理,比如过滤,正则匹配,字符串处理,得到我们想要的文字内容,给这个方法命名为
get_content()
这样这个对象内部就需要经过fetch_url 和 get_content 两个方法来得到最后我们需要的结果,而且两者是有明显的
顺序区别的,我们可以理解为调用完fetch_url 后回调 get_content 方法,大家可能会说,这是不是麻烦了很多,
其实,大家要知道,实际开发中这条执行链是可能会很长的,通过回调,我们就可以指定在某个步骤执行完后我们要进行怎么样的
操作,这样逻辑上和理解上都会很有效率

下面举个小例子演示下在类中实现回调的方法

#在类中使用回调方法

#在函数中使用回调
def click(callback):
  eval(callback)() #eval()可以讲字符串解析成可以执行的代码

def handle:
  print '在点击事件结束后调用该函数,进行处理,比如弹出框alert()'

if(__name__ == '__main__'):
  fun1('fun2')
Python 相关文章推荐
python 动态获取当前运行的类名和函数名的方法
Apr 15 Python
python调用短信猫控件实现发短信功能实例
Jul 04 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
python for 循环获取index索引的方法
Feb 01 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
pytorch的batch normalize使用详解
Jan 15 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
Python Selenium模块安装使用教程详解
Jul 09 Python
python rsa-oaep加密的示例代码
Sep 23 Python
python自然语言处理之字典树知识总结
Apr 25 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 #Python
python各种语言间时间的转化实现代码
Mar 23 #Python
Eclipse中Python开发环境搭建简单教程
Mar 23 #Python
在windows系统中实现python3安装lxml
Mar 23 #Python
Python使用Redis实现作业调度系统(超简单)
Mar 22 #Python
python编写简单爬虫资料汇总
Mar 22 #Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
Mar 21 #Python
You might like
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
javascript getElementsByClassName实现代码
2010/10/11 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python中的tuple元组详细介绍
2015/02/02 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
法律工作求职自荐信
2013/10/31 职场文书
毕业自我鉴定范文
2013/11/06 职场文书
大学活动策划书范文
2014/01/10 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
网络管理员岗位职责
2014/03/17 职场文书
幼儿园小班评语
2014/04/18 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
公司给客户的感谢信
2015/01/23 职场文书
2016春节放假通知范文
2015/08/18 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python