Как передать * args моему объекту timeit.Timer? - PullRequest
4 голосов
/ 05 февраля 2012

Первоначально я создал пользовательскую функцию для функций синхронизации, которая выглядит следующим образом:

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, я хочу реализовать то же самое, используя это.Я просто не могу понять, как это сделать при отправке аргументов функции и аргументов.Я уже понял, что я должен сделать это в настройке arg:

"from __main__ import function"

Но я не могу понять, что делать с * args, так как аргументы 'stmt' и 'setup'такое строки, как я могу передать переменные?

1 Ответ

6 голосов
/ 05 февраля 2012

Начиная с 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'))
...