python 回调函数(Callback)

在学习Tk时,接触到回调函数这个名词,单独列出来以便后续学习

在计算机程序设计中,回调函数简称回调(callback),指的是通过函数参数传递到其他代码的,某一块可用执行代码的应用。

 

程序举例:引用 https://www.cnblogs.com/berlin-sun/p/callbackinpython.html 的内容。

def my_callback(input):

    print "function my_callback was called with %s input" % (input,)
 
def caller(input, func):
    func(input)
 
for i in range(5):

    caller(i, my_callback)

执行结果如下:

关键代码是caller部分,将传入参数作为另外一个函数的定义。

另外:在知乎上看到一篇文章写得非常通俗易懂:

传送门:https://www.zhihu.com/question/19801131

******************2018-9-21*********************添加********************

在c++里面有函数指针的说法。程序中的代码和函数其实是有自己的地址的,比如说函数f(a)其实是有相应的内存空间,这里的a代表的是一个函数,函数a也是有相应的地址的,那么将函数的指针作为参数传递给另外一个函数使用,实际上另外的这个函数调用了指针所指向地址的内容。而函数对于谁是被调用者不关心,也就是说只要知道存在一个具有特定原型和限制条件的被调函数就可以了。

举例:编写一个计算函数computer,对于两个整数进行各种计算(通用的,什么计算都能做)。有一个形参是指向具体算法函数的指针,根据不同的实参函数,用不同的算法进行计算。

编写三个函数:求两个整数的最大值,最小值,和。分别用这三个函数作为实参,测试computer函数。

那么肯定有人会问,一个函数怎么可能做各种计算呢?——这个时候,我们在computer的形参中设置一个函数指针,每次调用的时候传递给它一个函数指针。

用函数名去初始化形参函数指针。这样的话,我们写computer函数的时候就只管说我要调用一个对两个整数做运算的函数,至于要做什么运算,只需要把代表这个运算的函数名传给我,我用函数指针来接收,用函数指针充当函数名,去调用函数体。这就是函数指针的好处,也就是函数回调。

#include<iostream>

using namespace std;

int computer(int a, int b, int(*func)(int, int)) {
	return func(a, b);
}

int max(int a, int b) {
	return (a > b ? a : b);
}

int min(int a, int b) {
	return (a > b ? b : a);
}

int sum(int a, int b) {
	return a + b;
}

int main() {
	int a, b, res;
	cout << "请输入整数a:"; cin >> a;
	cout << "请输入整数b:"; cin >> b;
	res = computer(a, b, &max);
	cout << "Max of " << a << " and " << b << " is " << res << endl;
	res = computer(a, b, &min);
	cout << "Min of " << a << " and " << b << " is " << res << endl;
	res = computer(a, b, &sum);
	cout << "Sum of " << a << " and " << b << " is " << res << endl;
	return 0;
}

结果:

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值