5

ドキュメントの

def test():
    """Stupid test function"""
    L = []
    for i in range(100):
        L.append(i)

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()", setup="from __main__ import test"))

ただし、パラメーターを使用して関数を呼び出す方法、たとえば、次のような関数:

def test(some_object):
    """Stupid test function"""
    L = []
    for i in range(100):
        L.append(some_object)
4

3 に答える 3

8

うーん、もしあなたの質問が正しければ、あなたはそれを探しているだけですか?

anobj = 42 # where it can be whatever object
def test(foo):
    pass # do something with foo

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test(anobj)", setup="from __main__ import test, anobj"))
于 2013-06-04T18:14:26.050 に答える
2

あなたの議論が途方もない行列やそのようなものでない限り、これはまさにこの状況で私のために働いた解決策の1つです。


メイン関数内で初期化した値で関数 foo(a,b,c) をテストしたいとしましょう。コードを変更せずに次の呼び出しを行うことができます。

timeit.Timer('foo({},{},{})'.format(a,b,c), "from __main__ import foo")

引数が文字列の場合は、値を引用符で囲む必要があります。

timeit.Timer('foo("{}","{}","{}")'.format(a,b,c), "from __main__ import foo")

最後の警告として、引数が str() 形式を通過することを考慮する必要があります。これにより、さまざまな種類の精度と完全性が失われる可能性があります。この方法を使用する場合は、入力内容を確認してください。

于 2014-05-14T00:16:43.053 に答える
0

使用したい:

def main():
    import timeit
    print(timeit.timeit("test(some_object)")) # don't need to use the 'setup'

def test(my_object):
    lst = []
    for i in range(100):
        lst.append(my_object)

if __name__ == '__main__':
    main()
于 2013-06-04T18:14:28.523 に答える