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复数属性和方法运算操作示例
Jul 21 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
详解Python中string模块除去Str还剩下什么
Nov 30 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中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
javascript每日必学之循环
2016/02/19 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
Python语言描述KNN算法与Kd树
2017/12/13 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
简单html5代码获取地理位置
2014/03/31 HTML / CSS
圣诞节红领巾广播稿
2014/02/03 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
踏青活动策划方案
2014/08/19 职场文书
立志成才演讲稿
2014/09/04 职场文书
先进个人自荐书
2015/03/06 职场文书
药房管理制度范本
2015/08/06 职场文书
会计入职心得体会
2016/01/22 职场文书
SpringBoot生成License的实现示例
2021/06/16 Java/Android
Java 超详细讲解hashCode方法
2022/04/07 Java/Android
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS