4

私はもともと、次のようなタイミング関数のカスタム関数を作成しました。

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引数を送信している間、それを行う方法がわかりません。セットアップ引数でこれを実行する必要があることはすでに理解しています。

"from __main__ import function"

しかし、「stmt」引数と「setup」引数はどちらも文字列であるため、* argsをどうすればよいかわかりません。変数を渡すにはどうすればよいですか?

4

1 に答える 1

6

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'))
于 2012-02-05T05:45:35.567 に答える