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中处理字符串的相关的len()方法的使用简介
May 19 Python
详解Python中的元组与逻辑运算符
Oct 13 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
浅谈python中的占位符
Nov 09 Python
python中多层嵌套列表的拆分方法
Jul 02 Python
Python离线安装PIL 模块的方法
Jan 08 Python
树莓派极简安装OpenCv的方法步骤
Oct 10 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
Python requests设置代理的方法步骤
Feb 23 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 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
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
php车辆违章查询数据示例
2016/10/14 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
PHP之header函数详解
2021/03/02 PHP
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
ES6函数实现排它两种写法解析
2020/05/13 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
python的迭代器与生成器实例详解
2014/07/16 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
机电专业个人自荐信格式模板
2013/09/23 职场文书
升职自荐信
2013/11/28 职场文书
医疗纠纷协议书
2014/04/16 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
教师年度个人总结
2015/02/11 职场文书
学生通报表扬范文
2015/05/04 职场文书
python 学习GCN图卷积神经网络
2022/05/11 Python
使用CSS实现音波加载效果
2023/05/07 HTML / CSS