目前在通過慕課網學習python的裝飾器知識,感覺不是很容易理解。從網上搜羅了很多的資料,看起來感覺也是一直半解。
1)在python中,可以使用函數作爲入參或者返回值。這個有點類似於C、C++中函數指針或者函數引用
2)以下面的無參數裝飾器爲例,語句@performance def factorial(n): 相當於factorial = performance(factorial)。這一點是裝飾器中比較重要的一點。從字面上理解來看,就相當於把函數factorial裝飾了一下,以後該怎麼着還是怎麼着。就好比一個人要出門參加一場宴會,你總得要“裝飾”(打扮)一下自己吧,穿上合適的衣服,抹點香水之類的東東,然後就出門了,到了宴會的地方,還是一樣,該吃就吃,該喝就喝。
藉助於慕課網上兩個實例(無參數裝飾器和帶參數裝飾器),現在只能先記下來,慢慢深入理解。(聲明:以下問題以及代碼均來自於慕課網課程python進階的“編寫無參數decorator”和“編寫帶參數decorator”)
問題1,請編寫一個@performance,它可以打印出函數調用的時間,——無參數裝飾器
import time def performance(f): def fn(*args, **kw): t1 = time.time() r = f(*args, **kw) t2 = time.time() print 'call %s() in %fs' % (f.__name__, (t2 - t1)) return r return fn @performance def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10)