先看一下C/C++的回调函数实例:
#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,&max);
cout << "Max of " << a << " and " << b << " is " << res << endl;
res = computer(a,&min);
cout << "Min of " << a << " and " << b << " is " << res << endl;
res = computer(a,&sum);
cout << "Sum of " << a << " and " << b << " is " << res << endl;
return 0;
}
结果:
再看python的情况:
def computer(a,func):
return func(a,b)
def max(a,b):
return [a,b][a < b]
def min(a,b][a > b]
def sum(a,b):
return str(int(a) + int(b))
if __name__ == "__main__":
a = input("请输入整数a:")
b = input("请输入整数b:")
res = computer(a,max)
print("Max of " + a + " and " + b + " is " + res)
res = computer(a,min)
print("Min of " + a + " and " + b + " is " + res)
res = computer(a,sum)
print("Sum of " + a + " and " + b + " is " + res)
结果:
注意:一开始在测试上面python代码的时候,我没有加类型转换str()和int(),出现了输出 Sum of 5 and 12 is 512 的情况。看来python用起来是方便,但是编译器帮我们做了太多的事情,有时候会让我们忽略一些程序的本质,所以不能光学python啊,c++还是要多看看,有助于对程序本质的理解。
说白了,回调函数和普通函数在定义的时候没有什么区别,只有在调用时才看出来是不是回调函数,正常调用就是普通函数,作为一个函数的参数在需要的时候分情况调用,就是回调函数。