python 回調(diào)函數(shù)和回調(diào)方法的實現(xiàn)分析
回調(diào)與事件驅(qū)動
回調(diào)函數(shù)有比較重要的意義:它在是事件驅(qū)動的體現(xiàn)
我們試想一個場景,如果我們觸發(fā)了某個事件,比如點擊事件
那么只要給這個點擊事件綁定一個或多個處理事件,也就是回調(diào)函數(shù)
我們就可以在點擊事件被觸發(fā)后(結(jié)束后)調(diào)用相應(yīng)的方法來處理后事
比如
普通回調(diào)
#在函數(shù)中使用回調(diào) def click(callback): eval(callback)() #eval()可以講字符串解析成可以執(zhí)行的代碼 def handle: print '在點擊事件結(jié)束后調(diào)用該函數(shù),進(jìn)行處理,比如彈出框alert()' if(__name__ == '__main__'): fun1('fun2')
上面那個場景很顯然是模擬我們?nèi)粘J褂脼g覽器是的一個場景:
當(dāng)我們點擊某個按鈕是,可能會彈出一個警告框或者確認(rèn)框,這可以理解為
點擊事件觸發(fā)后, 調(diào)用了這個處理函數(shù),這個函數(shù)的功能就是彈出一個警告框或者確認(rèn)框
從事件驅(qū)動來講: 點擊事件的發(fā)送驅(qū)動這handle處理程序的觸發(fā)
恩,這樣會不會比較清晰?
類中使用回調(diào)
因為python從一開始就是面向?qū)ο蟮亩ㄎ?,所以作為python 程序員, 可能會面對如下的場景:
我們創(chuàng)建一個實例, 我們傳入數(shù)據(jù)給這個實例,最后得到我們我們想要的結(jié)果,比如我們傳給
一個名為 getCsdnTitle的對象一個url(一篇csdn博客的url),我們希望最后得到這篇文章的文字內(nèi)容,
我們是不是首先地通過http請求獲取該url 對應(yīng)的html內(nèi)容,給這個方法命名為fetch_url()
然后我們需要對html進(jìn)行處理,比如過濾,正則匹配,字符串處理,得到我們想要的文字內(nèi)容,給這個方法命名為
get_content()
這樣這個對象內(nèi)部就需要經(jīng)過fetch_url 和 get_content 兩個方法來得到最后我們需要的結(jié)果,而且兩者是有明顯的
順序區(qū)別的,我們可以理解為調(diào)用完fetch_url 后回調(diào) get_content 方法,大家可能會說,這是不是麻煩了很多,
其實,大家要知道,實際開發(fā)中這條執(zhí)行鏈?zhǔn)强赡軙荛L的,通過回調(diào),我們就可以指定在某個步驟執(zhí)行完后我們要進(jìn)行怎么樣的
操作,這樣邏輯上和理解上都會很有效率
下面舉個小例子演示下在類中實現(xiàn)回調(diào)的方法
#在類中使用回調(diào)方法
#在函數(shù)中使用回調(diào) def click(callback): eval(callback)() #eval()可以講字符串解析成可以執(zhí)行的代碼 def handle: print '在點擊事件結(jié)束后調(diào)用該函數(shù),進(jìn)行處理,比如彈出框alert()' if(__name__ == '__main__'): fun1('fun2')
相關(guān)文章
Django與數(shù)據(jù)庫交互的實現(xiàn)
最近在學(xué)習(xí)Django,本文主要介紹了Django與數(shù)據(jù)庫交互的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06Django生成數(shù)據(jù)庫及添加用戶報錯解決方案
這篇文章主要介紹了Django生成數(shù)據(jù)庫及添加用戶報錯解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10Python統(tǒng)計某列不同值的個數(shù)的示例代碼
在數(shù)據(jù)分析和數(shù)據(jù)處理中,統(tǒng)計數(shù)據(jù)往往集中在特定列中不同值的出現(xiàn)次數(shù),本文主要介紹了Python統(tǒng)計某列不同值的個數(shù)的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-03-03