python 回調(diào)函數(shù)和回調(diào)方法的實(shí)現(xiàn)分析
回調(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ì)比較清晰?
類中使用回調(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è)小例子演示下在類中實(shí)現(xiàn)回調(diào)的方法
#在類中使用回調(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')
相關(guān)文章
Django與數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn)
最近在學(xué)習(xí)Django,本文主要介紹了Django與數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Django生成數(shù)據(jù)庫(kù)及添加用戶報(bào)錯(cuò)解決方案
這篇文章主要介紹了Django生成數(shù)據(jù)庫(kù)及添加用戶報(bào)錯(cuò)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Python統(tǒng)計(jì)某列不同值的個(gè)數(shù)的示例代碼
在數(shù)據(jù)分析和數(shù)據(jù)處理中,統(tǒng)計(jì)數(shù)據(jù)往往集中在特定列中不同值的出現(xiàn)次數(shù),本文主要介紹了Python統(tǒng)計(jì)某列不同值的個(gè)數(shù)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03python對(duì)RabbitMQ的簡(jiǎn)單入門使用教程
RabbitMq是實(shí)現(xiàn)了高級(jí)消息隊(duì)列協(xié)議(AMQP)的開(kāi)源消息代理中間件,下面這篇文章主要給大家介紹了關(guān)于python對(duì)RabbitMQ的簡(jiǎn)單入門使用,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06