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单链表实现代码实例
Nov 21 Python
Python入门篇之对象类型
Oct 17 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
python搭建虚拟环境的步骤详解
Sep 27 Python
python实现稀疏矩阵示例代码
Jun 09 Python
cmd运行python文件时对结果进行保存的方法
May 16 Python
mac下给python3安装requests库和scrapy库的实例
Jun 13 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 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
一个查看session内容的函数
2006/10/09 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
Python断言assert的用法代码解析
2018/02/03 Python
python如何爬取个性签名
2018/06/19 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
高中生学习生活的自我评价
2013/10/09 职场文书
家长对孩子评语
2014/01/30 职场文书
小学亲子活动总结
2014/07/01 职场文书
个人务虚会发言材料
2014/10/20 职场文书
招标保密承诺书
2015/01/20 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
导游词之湖北武当山
2019/09/23 职场文书
宝塔更新Python及Flask项目的部署
2022/04/11 Python