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 strip()函数 介绍
May 24 Python
Python实现文件复制删除
Apr 19 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
python验证身份证信息实例代码
May 06 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
Python 图像对比度增强的几种方法(小结)
Sep 25 Python
python OpenCV学习笔记
Mar 31 Python
Anaconda配置各版本Pytorch的实现
Aug 07 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php三维数组去重(示例代码)
2013/11/26 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
AngularJS快速入门
2015/04/02 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
react-router实现按需加载
2017/05/09 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
Django和Flask框架优缺点对比
2019/10/24 Python
keras topN显示,自编写代码案例
2020/07/03 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
土木工程毕业生自荐信
2013/09/21 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
民事和解协议书格式
2014/11/29 职场文书
庐山导游词
2015/02/03 职场文书
研讨会通知
2015/04/27 职场文书
迎新生欢迎词2015
2015/07/16 职场文书