2013年3月20日 星期三

callback function 與 decorator ( 以 python 為示範 )

    在網路上看到有人問 callback function 和 decorator 有何不同。 基本上,他們兩個完全是不同概念的東西。 callback function 是指 A function  呼叫 B  function 時,傳入 C function 作為參數。B function 在做一些事情後,可能會呼叫 C function。 C function 在這個情境下就是 callback function。




def demo_callback(callback);
    #do something if need
    callback()
    #do something if need



    而在 python 中的 decorator  是個語法糖衣。讓程式設計師,可以在不修改原本函數的內容下,為原本函數加上新的功能。實作上,就只是把建立一個新 function ,與原本 function 同名,把舊的 function 蓋掉。


def call_after(func):
    def wrapper(wrapped_func):
        def inner_wrapper():
            func()
            wrapped_func()
        return inner_wrapper
    return wrapper

def update_counter():
    print 'update counter'

@call_after(update_counter)
def demo_func():
    print 'do something'

demo_func()

    上面這個例子是,利用 decorator  來做到確保每次執行 demo_func 前,會先執行 update_counter。使用 decorator   可以在不修改原先 function 下,進行新功能。

    附帶一提, callback function 可以在 runtime 時決定,不過 decorator  卻是寫完 code 大概就知道會做那些事了。

沒有留言:

張貼留言