1.裝飾器
裝飾器用來實現一種切面功能,即一些函數在調用前都必須實現的功能,比如用戶是否登錄,用戶是否有權限這類需求,都很容易由裝飾器來實現。
import functools def log(func): @functools.wraps(func) def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper @log def now(): print('2015-3-25') 給函數now定義了一個裝飾器log,實現功能:在調用函數之前,打印出函數的名字 最終的輸出是: >>> now() call now(): 2015-3-25
2.回調函數
回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。
個人理解的回調函數類似於這樣一種情況,產品經理需要實現某種功能,需要找到開發,開發說我可以幫你寫個函數實現這個功能,但是功能有點復雜,在不同的情況下需要傳入不同的參數,這個參數是需要你來給我的。
一般應用於對應某一事件觸發的函數。比方要實現爬蟲,我可以幫你寫個爬蟲函數,但是你首先得知道要爬蟲網站的URL,大概就是這樣一個意思。
回調函數豐富了函數的調用方法,給開發帶來很多方便。
In [11]: def test(num): ...: for i in range(num): ...: print 'hello,world' In [13]: def call(times,funcname): ...: return funcname(times) In [14]: call(3,test) hello,world hello,world hello,world
