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线程、进程和协程详解
Jul 19 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
Python处理中文标点符号大集合
May 14 Python
Python实现的knn算法示例
Jun 14 Python
python format 格式化输出方法
Jul 16 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
Python实现的括号匹配判断功能示例
Aug 25 Python
Python实现的调用C语言函数功能简单实例
Mar 13 Python
在django模板中实现超链接配置
Aug 21 Python
安装多个版本的TensorFlow的方法步骤
Apr 21 Python
python文本处理的方案(结巴分词并去除符号)
May 26 Python
教你使用TensorFlow2识别验证码
Jun 11 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
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
2018/05/07 Python
python实现按长宽比缩放图片
2018/06/07 Python
python实现输入数字的连续加减方法
2018/06/22 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
keras中的backend.clip用法
2020/05/22 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
详解Python中import机制
2020/09/11 Python
Python类的继承super相关原理解析
2020/10/22 Python
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
优秀民警事迹材料
2014/01/29 职场文书
《母鸡》教学反思
2014/02/25 职场文书
感恩寄语大全
2014/04/11 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
赤壁观后感(2)
2015/06/15 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js