回調(diào)函數(shù)的意義以及python實(shí)現(xiàn)實(shí)例
因工作需要,最近在學(xué)習(xí)使用python來解析各種文件,包括xmind,xml,excel,csv等等。
在學(xué)習(xí)python解析XML的時(shí)候看到這樣一段話:
ElementTree(元素樹) ElementTree就像一個(gè)輕量級的DOM,具有方便友好的API。代碼可用性好,速度快,消耗內(nèi)存少。 注:因DOM需要將XML數(shù)據(jù)映射到內(nèi)存中的樹,一是比較慢,二是比較耗內(nèi)存,而SAX流式讀取XML文件,比較快,占用內(nèi)存少,但需要用戶實(shí)現(xiàn)回調(diào)函數(shù)(handler)。
當(dāng)時(shí)就,被一個(gè)不是很知道的名詞引起了興趣--回調(diào)函數(shù),后搜索資料學(xué)習(xí)了一下,感覺需要寫個(gè)什么來記錄一下順便加深映象,此處引用了不少各位神的經(jīng)驗(yàn),篇幅所限就不一一感謝了。
回調(diào)函數(shù)(callback),百度百科的解釋是這樣的:
回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對該事件或條件進(jìn)行響應(yīng)。
可能是學(xué)識確實(shí)有限,看起來比較懵逼。然后去找了一些通俗易懂的解釋--就好像是家政服務(wù),家政公司提供了一個(gè)API:打掃房子,而且還能提供各種打掃,比如掃地,擦家具,清潔馬桶等等,我們把打掃房子看做庫函數(shù),那么打掃屋子的方式呢是你自己決定的,你要怎么打掃就要預(yù)約并執(zhí)行那種回調(diào)函數(shù),你預(yù)約并執(zhí)行服務(wù)的行為叫做登記回調(diào)函數(shù)。下面寫個(gè)看起來很low的實(shí)現(xiàn)以便理解
# coding=utf-8 # 請不要在意為毛要清潔這么多次 def clean1(times): """ 就假裝是掃地吧,這種函數(shù)命名方式,千萬別學(xué)習(xí) :param times: 次數(shù) :return: None """ print '已完成掃地次數(shù):', str(times) def clean2(times): """ 默默的裝作洗抽油煙機(jī) :param times: 次數(shù) :return: None """ print '已洗抽油煙機(jī)次數(shù)', str(times) def call_clean(times, function_name): """ 這個(gè)很重要,這個(gè)就是家政公司的業(yè)務(wù)系統(tǒng),要啥業(yè)務(wù)都得在這說 這個(gè)是實(shí)現(xiàn)回調(diào)函數(shù)的核心 :param times:次數(shù) :param function_name:回調(diào)函數(shù)名 :return:調(diào)用的函數(shù)結(jié)果 """ return function_name(times) if __name__ == '__main__': call_clean(100, clean2) # 給我洗100次抽油煙機(jī)
最后說一句,看到這應(yīng)該懂了的一句話:
回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python入門turtle庫實(shí)現(xiàn)螺旋曲線圖的方法示例
turtle(海龜)是Python重要的標(biāo)準(zhǔn)庫之一,它能夠進(jìn)行基本的圖形繪制,本文就來介紹了一下python入門turtle庫實(shí)現(xiàn)螺旋曲線圖的方法示例,感興趣的可以了解一下2021-11-11
Python Pandas創(chuàng)建Dataframe數(shù)據(jù)框的六種方法匯總
這篇文章主要介紹了Python中的Pandas創(chuàng)建Dataframe數(shù)據(jù)框的六種方法,創(chuàng)建Dataframe主要是使用pandas中的DataFrame函數(shù),其核心就是第一個(gè)參數(shù):data,傳入原始數(shù)據(jù),因此我們可以據(jù)此給出六種創(chuàng)建Dataframe的方法,需要的朋友可以參考下2023-05-05
Python函數(shù)遞歸調(diào)用實(shí)現(xiàn)原理實(shí)例解析
這篇文章主要介紹了Python函數(shù)遞歸調(diào)用實(shí)現(xiàn)原理過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Python字符串操作實(shí)戰(zhàn)之如何提取子字符串
這篇文章主要給大家介紹了關(guān)于Python字符串操作實(shí)戰(zhàn)之如何提取子字符串的相關(guān)資料,字符串是Python中最常用的數(shù)據(jù)類型,大家應(yīng)該都不陌生,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Django REST framework 單元測試實(shí)例解析
這篇文章主要介紹了Django REST framework 單元測試實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
python利用proxybroker構(gòu)建爬蟲免費(fèi)IP代理池的實(shí)現(xiàn)
這篇文章主要介紹了python利用proxybroker構(gòu)建爬蟲免費(fèi)IP代理池,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

