回調(diào)與事件驅(qū)動(dòng)
回調(diào)函數(shù)有比較重要的意義:它在是事件驅(qū)動(dòng)的體現(xiàn)
我們?cè)囅胍粋€(gè)場(chǎng)景,如果我們觸發(fā)了某個(gè)事件,比如點(diǎn)擊事件
那么只要給這個(gè)點(diǎn)擊事件綁定一個(gè)或多個(gè)處理事件,也就是回調(diào)函數(shù)
我們就可以在點(diǎn)擊事件被觸發(fā)后(結(jié)束后)調(diào)用相應(yīng)的方法來(lái)處理后事
比如
普通回調(diào)
#在函數(shù)中使用回調(diào)def click(callback): eval(callback)() #eval()可以講字符串解析成可以執(zhí)行的代碼def handle: print '在點(diǎn)擊事件結(jié)束后調(diào)用該函數(shù),進(jìn)行處理,比如彈出框alert()'if(__name__ == '__main__'): fun1('fun2') 上面那個(gè)場(chǎng)景很顯然是模擬我們?nèi)粘J褂脼g覽器是的一個(gè)場(chǎng)景:
當(dāng)我們點(diǎn)擊某個(gè)按鈕是,可能會(huì)彈出一個(gè)警告框或者確認(rèn)框,這可以理解為
點(diǎn)擊事件觸發(fā)后, 調(diào)用了這個(gè)處理函數(shù),這個(gè)函數(shù)的功能就是彈出一個(gè)警告框或者確認(rèn)框
從事件驅(qū)動(dòng)來(lái)講: 點(diǎn)擊事件的發(fā)送驅(qū)動(dòng)這handle處理程序的觸發(fā)
恩,這樣會(huì)不會(huì)比較清晰?
類(lèi)中使用回調(diào)
因?yàn)閜ython從一開(kāi)始就是面向?qū)ο蟮亩ㄎ唬宰鳛閜ython 程序員, 可能會(huì)面對(duì)如下的場(chǎng)景:
我們創(chuàng)建一個(gè)實(shí)例, 我們傳入數(shù)據(jù)給這個(gè)實(shí)例,最后得到我們我們想要的結(jié)果,比如我們傳給
一個(gè)名為 getCsdnTitle的對(duì)象一個(gè)url(一篇csdn博客的url),我們希望最后得到這篇文章的文字內(nèi)容,
我們是不是首先地通過(guò)http請(qǐng)求獲取該url 對(duì)應(yīng)的html內(nèi)容,給這個(gè)方法命名為fetch_url()
然后我們需要對(duì)html進(jìn)行處理,比如過(guò)濾,正則匹配,字符串處理,得到我們想要的文字內(nèi)容,給這個(gè)方法命名為
get_content()
這樣這個(gè)對(duì)象內(nèi)部就需要經(jīng)過(guò)fetch_url 和 get_content 兩個(gè)方法來(lái)得到最后我們需要的結(jié)果,而且兩者是有明顯的
順序區(qū)別的,我們可以理解為調(diào)用完fetch_url 后回調(diào) get_content 方法,大家可能會(huì)說(shuō),這是不是麻煩了很多,
其實(shí),大家要知道,實(shí)際開(kāi)發(fā)中這條執(zhí)行鏈?zhǔn)强赡軙?huì)很長(zhǎng)的,通過(guò)回調(diào),我們就可以指定在某個(gè)步驟執(zhí)行完后我們要進(jìn)行怎么樣的
操作,這樣邏輯上和理解上都會(huì)很有效率
下面舉個(gè)小例子演示下在類(lèi)中實(shí)現(xiàn)回調(diào)的方法
#在類(lèi)中使用回調(diào)方法
#在函數(shù)中使用回調(diào)def click(callback): eval(callback)() #eval()可以講字符串解析成可以執(zhí)行的代碼def handle: print '在點(diǎn)擊事件結(jié)束后調(diào)用該函數(shù),進(jìn)行處理,比如彈出框alert()'if(__name__ == '__main__'): fun1('fun2') 


















