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使用reportlab画图示例(含中文汉字)
Dec 03 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
Python设计模式之状态模式原理与用法详解
Jan 15 Python
python反编译学习之字节码详解
May 19 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
Python变量格式化输出实现原理解析
Aug 06 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
python 进阶学习之python装饰器小结
Sep 04 Python
python中的sys模块和os模块
Mar 20 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开发入门教程之面向对象
2006/12/05 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
php多线程并发实现方法
2016/09/30 PHP
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Python与shell的3种交互方式介绍
2015/04/11 Python
python实现简单中文词频统计示例
2017/11/08 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Random 在 Python 中的使用方法
2018/08/09 Python
Python中正则表达式的用法总结
2019/02/22 Python
numpy 声明空数组详解
2019/12/05 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
七一党建活动方案
2014/01/28 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
十二月早安励志心语大全
2019/12/03 职场文书