2017-04-25 31 views
3

基本上我想要實現定時裝飾:裝飾 - 試圖理解這個簡單的例子

def laptime(func): 
    def inner(*args): 
     start = time.time() 
     r = func(*args) 
     print time.time()-start 
    return r 

@laptime 
def loop(a,b): 
    for i in range(a,b): 
     print (i) 

loop(2, 1000) 

我試圖使其工作的方法很多,但他們都返回有趣的結果,我不明白......我知道關於這個主題還有其他許多問題,但不知何故,這些問題對我沒有幫助,以便更好地理解這應該如何完成。

回答

6

裝飾器函數將函數作爲參數並返回修改的函數。您的laptime不會返回修改後的功能(inner),並且在return r上有錯誤的縮進。

這是一個修復的版本。我也改變了它,所以它會在兩個Python的2 &的Python 3

import time 

def laptime(func): 
    def inner(*args): 
     start = time.time() 
     r = func(*args) 
     print(time.time() - start) 
     return r 
    return inner 

@laptime 
def loop(a,b): 
    for i in range(a,b): 
     print(i) 

loop(2, 10) 

輸出

2 
3 
4 
5 
6 
7 
8 
9 
0.000479936599731 

正常運行的@decorator語法可能有點玄首先,但你最終會習慣它。 :)

@laptime 
def loop(a,b): 
    for i in range(a,b): 
     print(i) 

完全是相同的:

def loop(a,b): 
    for i in range(a,b): 
     print(i) 

loop = laptime(loop) 
+0

是的,我想我已瞭解了一下現在好了......直到下一次!謝謝 –