Python裝飾器和回調函數


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM