2

別の関数の時間を取得するために、この作業関数を作成します。

def get_execution_time(function, args, numberOfExecTime=1):
    """Return the execution time of a function in seconds.

    """

    return round(Timer(partial(function, args)).timeit(numberOfExecTime), 5)

ちなみに、私には問題があります。時間を計る関数に複数の入力(引数)を与えることができません。どうやってやるの?部分的に適切なツールですか?

デコレータを試しましたが、統計を行うために必要な時間を保存できません。

4

4 に答える 4

4

numberOfExecTime引数のデフォルト値を持つ機能を犠牲にできる場合は、次のようにできます。

from timeit import Timer
from functools import partial

def get_execution_time(function, numberOfExecTime, *args, **kwargs):
    """Return the execution time of a function in seconds."""
    return round(Timer(partial(function, *args, **kwargs))
                 .timeit(numberOfExecTime), 5)

def foo(a, b, c = 12):
    print a, b, c

get_execution_time(foo, 1, 3, 4, c = 14)

または、そのようにして、デフォルト値を保持することもできますnumberOfExecTime

from timeit import Timer
from functools import partial

def get_execution_time(function, *args, **kwargs):
    """Return the execution time of a function in seconds."""
    numberOfExecTime = kwargs.pop('numberOfExecTime', 1)
    return round(Timer(partial(function, *args, **kwargs))
                 .timeit(numberOfExecTime), 5)

def foo(a, b, c = 1):
    print a, b, c

get_execution_time(foo, 1, 2, c = 2)
# => 1 2 2

get_execution_time(foo, 4, 5, c = 3, numberOfExecTime = 2)
# => 4 5 3
# => 4 5 3
于 2011-12-08T20:39:33.137 に答える
3

複数の引数を渡すことができますargs。渡す引数を含むタプルにする必要があります。

*argsこれで、の代わりに渡すことができますargs

(メソッドに kwargs も渡す必要がある場合は、get_execution_time別の引数に入れkwargsて に渡し**kwargsますfunction)

def get_execution_time(function, args=(), kwargs ={}, numberOfExecTime=1):
    return round(Timer(partial(function, *args, **kwargs)).timeit(numberOfExecTime), 5)
于 2011-12-08T20:36:24.293 に答える
2

タイミングデコレータを使用します。

import time

def timeit(f):

    def timed(*args, **kw):

        ts = time.time()
        result = f(*args, **kw)
        te = time.time()

        print 'func:%r args:[%r, %r] took: %2.4f sec' % \
          (f.__name__, args, kw, te-ts)
        return result

    return timed

デコレーターの使用は、注釈を使用するか簡単です。

@timeit
def compute_magic(n):
     #function definition
     #....

または、時間を計りたい関数を再エイリアスします。

compute_magic = timeit(compute_magic)

ここの私のブログ投稿には、より多くの情報があります。http://blog.mattalcock.com/2013/2/24/timing-python-code/

于 2013-02-28T13:04:48.960 に答える
0

argsが引数の場合、list次のように展開できます*args

return round(Timer(partial(function, args)).timeit(numberOfExecTime), 5)
于 2011-12-08T20:37:53.027 に答える