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基础教程之获取本机ip数据包示例
Feb 10 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
python递归函数绘制分形树的方法
Jun 22 Python
Pycharm更换python解释器的方法
Oct 29 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
Django分页功能的实现代码详解
Jul 29 Python
Python 求数组局部最大值的实例
Nov 26 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 Python
python 用递归实现通用爬虫解析器
Apr 16 Python
python 定义函数 返回值只取其中一个的实现
May 21 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面向对象概念
2011/11/06 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
react的hooks的用法详解
2020/10/12 Javascript
JS实现多功能计算器
2020/10/28 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
Python深入学习之上下文管理器
2014/08/31 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
numpy库reshape用法详解
2020/04/19 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
戒毒悔改检讨书
2014/09/21 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android