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中copy()方法的使用
May 21 Python
Python判断字符串与大小写转换
Jun 08 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
Python中int()函数的用法浅析
Oct 17 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
python标识符命名规范原理解析
Jan 10 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
php5 mysql分页实例代码
2008/04/10 PHP
PHP 简单日历实现代码
2009/10/28 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
理解JavaScript中的事件
2006/09/23 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
javascript创建对象的几种模式介绍
2016/05/06 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
python实现自动清理重复文件
2020/08/24 Python
Python实现自动整理文件的脚本
2020/12/17 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
C#公司笔试题
2014/03/28 面试题
创联软件面试题笔试题
2012/10/07 面试题
英语文学专业学生的自我评价
2013/10/31 职场文书
计算机专业毕业生的自我评价
2013/11/18 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python