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中实现两个字典(dict)合并的方法
Sep 23 Python
深入探究Python中变量的拷贝和作用域问题
May 05 Python
用Python将IP地址在整型和字符串之间轻松转换
Mar 22 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
对python中的装包与解包实例详解
Aug 24 Python
python读文件的步骤
Oct 08 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
python lambda函数及三个常用的高阶函数
Feb 05 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
PyTorch预训练Bert模型的示例
Nov 17 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
php实现session共享的实例方法
2019/09/19 PHP
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
文艺演出策划方案
2014/06/07 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
数学备课组工作总结
2015/08/12 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
如何判断pytorch是否支持GPU加速
2021/06/01 Python
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL