美文网首页
回调函数的理解精髓

回调函数的理解精髓

作者: 橘子粟粟 | 来源:发表于2020-05-21 10:52 被阅读0次

    精髓:回调函数是一种基于相互呼叫的三方游戏 !!!

    首先先明确参与三方,分别是初始函数回调函数中间函数
    通常其他博客上所说的回调关系只存在于回调函数与中间函数之间,但是这样的理解还不够全面,准确来说应该是一种三方联动的关系。

    三方联动

    传统的回调机制可以归纳为中间函数与回调函数之间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

    相关文章

      网友评论

          本文标题:回调函数的理解精髓

          本文链接:https://www.haomeiwen.com/subject/cltzohtx.html