2012-02-05 54 views
4

我原來做了一個自定義函數用於計時,看起來像這樣的功能:現在如何將* args傳遞給我的timeit.Timer對象?

def timefunc(function, *args): 
    start = time.time() 
    data = function(*args) 
    end = time.time() 
    time_taken = end - start 
    print "Function: "+function.__name__ 
    print "Time taken:",time_taken 
    return data 

,在瞭解timeit模塊,我想使用來實現同樣的事情。我只是無法弄清楚如何在發送函數和* args參數時執行此操作。我已經想通了,我必須這樣做在設置ARG:

"from __main__ import function" 

但我想不出該怎麼辦*指定參數時,因爲無論是「語句」和「設置」參數都是字符串,我怎樣才能傳遞變量?

+0

我認爲你可以做'*(參數+ [ARG1,ARG2])'。 – Blender 2012-02-05 05:21:20

回答

5

從Python 2.6開始,timeit模塊除了字符串之外還接受可調用爲stmt。考慮到這一點,你可以這樣做:

import timeit 

def timefunc(function, *args): 
    def wrap(): 
     function(*args) 
    t = timeit.Timer(wrap) 
    return t.timeit(100) 

def test(arg): 
    foo = arg 

print(timefunc(test, 'bar'))