“回撥函式就是一個透過函式指標呼叫的函式。
如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式。”
——網上摘來的一段回撥函式的解釋,好吧,比較拗口。
我們來打個比方:
學校要進行出入管制了,告訴門衛發現寵物和車要上報(這個是回撥函式註冊),然後管理人員根據門衛的上報進行處理(這個是回撥函式的執行)。
import os,sys Find={ 'Type':'', 'Color':'', 'Size':'' }#定義彙報內容 def CallFun(cmd,Find):#回撥函式的定義,在這裡處理各種回撥情況 if cmd=='Type': if Find['Type']=='Dog' or Find['Type']=='Cat': print 'A Pet:' else: print 'A Transport:' elif cmd=='Print': print Find else: print 'error' def GiveInfo(i):#該段是填報資訊,可忽略 type0=['Dog','Cat'] type1=['Car','Truck'] color0=['Black','White','Pink'] size0=['Big','Middle','Small'] t0=i % 2 if t0== 0: Find['Type'] = type0[i%2] else: Find['Type'] = type1[i%2] Find['Color'] = color0[i%3] Find['Size'] = size0[i%3] def FindObj(num,cmd,CallBackFun):#發現目標,啟動回撥函式 GiveInfo(num)#門衛填報資訊 CallBackFun(cmd,Find)#啟動回撥函式 if __name__ == '__main__': cmds=['Type','Print','Try'] for i in range(0,10):#定義十次上報 print '----------%d-------------'%i FindObj(i,cmds[i%3],CallFun)#這裡註冊回撥函式(就是告知門衛的過程)
回撥利於模組解耦。