精髓:回调函数是一种基于相互呼叫的三方游戏 !!!
首先先明确参与三方,分别是初始函数,回调函数,中间函数
通常其他博客上所说的回调关系只存在于回调函数与中间函数之间,但是这样的理解还不够全面,准确来说应该是一种三方联动的关系。
传统的回调机制可以归纳为中间函数与回调函数之间If you call me with something,I will call you with something,如下图所示(摘自维基百科)。而起始函数实际上的作用是就是调用中间函数进而引发回调机制。
我们可以举个例子理解他们之间的关系:一个顾客进入了一家旅馆,这家旅馆提供唤醒服务,但是如果顾客想调用这个使用服务服务,则必须事先通知旅馆叫醒自己的方式,旅馆获知顾客所要求的唤醒方式后,会在某个时间段用该种方式唤醒他。
在上面这个例子中,顾客进入旅馆相当于初始函数调用了中间函数,旅馆提供的唤醒服务相当于中间函数,具体的唤醒方式相当于回调函数。顾客通知旅馆唤醒自己的方式相当于call to 过程,旅馆最终唤醒顾客相当于call back 过程。
下面使用程序理解一下函数的回调机制
#回调函数1
#生成一个2k形式的偶数
def double(x):
return x * 2
#回调函数2
#生成一个4k形式的偶数
def quadruple(x):
return x * 4
from even import *
#中间函数
#接受一个生成偶数的函数作为参数
#返回一个奇数
def getOddNumber(k, getEvenNumber):
return 1 + getEvenNumber(k)
#起始函数,这里是程序的主函数
def main():
k = 1
#当需要生成一个2k+1形式的奇数时
i = getOddNumber(k, double)
print(i)
#当需要一个4k+1形式的奇数时
i = getOddNumber(k, quadruple)
print(i)
#当需要一个8k+1形式的奇数时
i = getOddNumber(k, lambda x: x * 8)
print(i)
if __name__ == "__main__":
main()
补充一个网友有趣的解释
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。
参考:
https://www.zhihu.com/question/19801131/answer/27459821
https://www.zhihu.com/question/19801131/answer/13005983
网友评论