因工作需要,最近在學習使用python來解析各種文件,包括xmind,xml,excel,csv等等。
在學習python解析XML的時候看到這樣一段話:
ElementTree(元素樹) ElementTree就像一個輕量級的DOM,具有方便友好的API。代碼可用性好,速度快,消耗內存少。 注:因DOM需要將XML數據映射到內存中的樹,一是比較慢,二是比較耗內存,而SAX流式讀取XML文件,比較快,占用內存少,但需要用戶實現回調函數(handler)。
當時就犯了老毛病,被一個不是很知道的名詞引起了興趣--回調函數,后搜索資料學習了一下,感覺需要寫個什么來記錄一下順便加深映象,此處引用了不少各位神的經驗,篇幅所限就不一一感謝了。
回調函數(callback),百度百科的解釋是這樣的:
回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用于對該事件或條件進行響應。
可能是學識確實有限,看起來比較懵逼。然后去找了一些通俗易懂的解釋--就好像是家政服務,家政公司提供了一個API:打掃房子,而且還能提供各種打掃,比如掃地,擦家具,清潔馬桶等等,我們把打掃房子看做庫函數,那么打掃屋子的方式呢是你自己決定的,你要怎么打掃就要預約并執行那種回調函數,你預約并執行服務的行為叫做登記回調函數。下面寫個看起來很low的實現以便理解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# coding=utf-8 # 請不要在意為毛要清潔這么多次 def clean1(times): """ 就假裝是掃地吧,這種函數命名方式,千萬別學習 :param times: 次數 :return: None """ print '已完成掃地次數:' , str (times) def clean2(times): """ 默默的裝作洗抽油煙機 :param times: 次數 :return: None """ print '已洗抽油煙機次數' , str (times) def call_clean(times, function_name): """ 這個很重要,這個就是家政公司的業務系統,要啥業務都得在這說 這個是實現回調函數的核心 :param times:次數 :param function_name:回調函數名 :return:調用的函數結果 """ return function_name(times) if __name__ = = '__main__' : call_clean( 100 , clean2) # 給我洗100次抽油煙機,好吧,很變態 |
最后說一句,看到這應該懂了的一句話:
回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/hainan-zhang/p/6222552.html