回调函数的意义以及python实现实例

yipeiwu_com6年前Python基础

因工作需要,最近在学习使用python来解析各种文件,包括xmind,xml,excel,csv等等。

在学习python解析XML的时候看到这样一段话:

ElementTree(元素树) ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。 注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。

当时就犯了老毛病,被一个不是很知道的名词引起了兴趣--回调函数,后搜索资料学习了一下,感觉需要写个什么来记录一下顺便加深映象,此处引用了不少各位神的经验,篇幅所限就不一一感谢了。

 回调函数(callback),百度百科的解释是这样的:

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

可能是学识确实有限,看起来比较懵逼。然后去找了一些通俗易懂的解释--就好像是家政服务,家政公司提供了一个API:打扫房子,而且还能提供各种打扫,比如扫地,擦家具,清洁马桶等等,我们把打扫房子看做库函数,那么打扫屋子的方式呢是你自己决定的,你要怎么打扫就要预约并执行那种回调函数,你预约并执行服务的行为叫做登记回调函数。下面写个看起来很low的实现以便理解

# coding=utf-8
# 请不要在意为毛要清洁这么多次


def clean1(times):
  """
  就假装是扫地吧,这种函数命名方式,千万别学习
  :param times: 次数
  :return: None
  """
  print '已完成扫地次数:', str(times)


def clean2(times):
  """
  默默的装作洗抽油烟机
  :param times: 次数
  :return: None
  """
  print '已洗抽油烟机次数', str(times)


def call_clean(times, function_name):
  """
  这个很重要,这个就是家政公司的业务系统,要啥业务都得在这说
  这个是实现回调函数的核心
  :param times:次数
  :param function_name:回调函数名
  :return:调用的函数结果
  """
  return function_name(times)

if __name__ == '__main__':
  call_clean(100, clean2) # 给我洗100次抽油烟机,好吧,很变态

最后说一句,看到这应该懂了的一句话:

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python 调用DLL操作抄表机

# -*- coding: GBK -*- from ctypes import * dll = windll.LoadLibrary('JBA188.dll') a = dll.tes...

numpy按列连接两个维数不同的数组方式

合并两个维数不同的ndarray 假设我们有一个3×2 numpy数组: x = array(([[1,2], [3, 4], [5,6]])) 现在需要把它与一个一维数组:...

PyQt5 多窗口连接实例

PyQt5 多窗口连接实例

前言 之前做过pyqt的一个简单界面,在一个窗口(MainWindow)中实现一些操作;之前嫌麻烦没有去做多窗口和它们的切换功能。最近研究了下窗口的调用和切换。 pyqt4和5有很多不同...

Python虚拟环境项目实例

Python虚拟环境项目实例

这里想象一下需求,写一个项目使用的一系列1.0版本的插件,现在要新写一个项目,需要用这些插件的2.0版本,该怎么办?都更新成2.0版本?这样之前的项目都没法维护了 这时我们需要一个虚拟环...

对numpy数据写入文件的方法讲解

numpy数据保存到文件 Numpy提供了几种数据保存的方法。 以3*4数组a为例: 1. a.tofile("filename.bin") 这种方法只能保存为二进制文件,且不能保存当前...