目录
将函数作为一个参数传递给另外一个调用,这个被传递的函数,就叫做回调函数。
定义回调函数
回调函数的定义方法与一般函数定义相同
# 定义回调函数double()
def double(x):
print(f"double()被调用")
return x * 2
传递回调函数
这里定义了另外两个回调函数,并在后面调用了它们。
# 定义回调函数quadruple()
def quadruple(x):
print("quadruple()被调用")
return x * 4
# 定义中间函数getOddNumber(k, getEvenNumber)
def getOddNumber(k, getEvenNumber):
k = k + 1
print(f"k: {k}")
print(f"将k传递给{getEvenNumber.__name__}")
return 1 + getEvenNumber(k)
# 主函数
def main():
print("调用main()函数")
k = 1
# 返回2k+1形式的奇数
i = getOddNumber(k, double)
print(f"i: {i}")
# 返回4k+1形式的奇数
i = getOddNumber(k, quadruple)
print(f"i: {i}")
# 返回8k+1形式的奇数
i = getOddNumber(k, lambda k: k*8)
print(f"i: {i}")
if __name__ == "__main__":
main()
'''
调用main()函数
k: 2
将k传递给double
double()被调用
i: 5
k: 2
将k传递给quadruple
quadruple()被调用
i: 9
k: 2
将k传递给<lambda>
i: 17
'''
使用修饰器注册回调函数
在类里面定义修饰器callback(),通过@demo.callback注册回调函数。
# 定义类
class Demo():
def foo(self, num):
return self.callback_func(num)
# 定义修饰器
def callback(self, func):
self.callback_func = func
# 初始化类
demo = Demo()
# 注册回调函数1
@demo.callback
def double(x):
return 2 * x
# 调用回调函数1
demo.foo(3) # 6
# 注册回调函数2
@demo.callback
def inserve(x):
return -x
# 调用回调函数2
demo.foo(3) # -3