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的Template使用指南
Sep 11 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
python如何实现视频转代码视频
Jun 17 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
Python魔法方法 容器部方法详解
Jan 02 Python
如何基于Python实现数字类型转换
Feb 07 Python
关于python中的xpath解析定位
Mar 06 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
python怎么提高计算速度
Jun 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 欧美动漫
php 正则匹配函数体
2009/08/25 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
dedecms中使用php语句指南
2014/11/13 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
js 提交和设置表单的值
2008/12/19 Javascript
JS跨域代码片段
2012/08/30 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
解析vue中的$mount
2017/12/21 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
js里面的变量范围分享
2020/07/18 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
python算法学习之基数排序实例
2013/12/18 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python基本语法练习实例
2017/09/19 Python
python pandas模块基础学习详解
2019/07/03 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
寒假思想汇报
2014/01/10 职场文书
学术会议邀请函范文
2014/01/22 职场文书
培训督导岗位职责
2015/04/10 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL