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中pass语句用法实例分析
Apr 30 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
python获取中文字符串长度的方法
Nov 14 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 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+memcache实现的网站在线人数统计代码
2014/07/04 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
selenium+python实现自动登录脚本
2018/04/22 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
原生python实现knn分类算法
2019/10/24 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
联强国际笔试题面试题
2013/07/10 面试题
学校宣传标语
2014/06/18 职场文书
九一八事变演讲稿
2014/09/05 职场文书
太行山上观后感
2015/06/05 职场文书
使用Ajax实现无刷新上传文件
2022/04/12 Javascript