6

timeitモジュールを使おうとしていますが、方法がわかりません。私はメインを持っています:

from Foo import Foo
if __name__ == '__main__':
...
   foo = Foo(arg1, arg2) 
   t = Timer("foo.runAlgorithm()")
   print t.timeit(2)

私のClassFooには、runAlgorithm()という名前のメソッドがあります。

エラーはこれです:

NameError:グローバル名'foo'が定義されていません

私は何が間違っているのですか?クラスメソッドから時間をとることはできますか?

4

2 に答える 2

16

timeit環境を設定するために必要なsetupパラメーターを使用する代わりに、メソッド(または呼び出し可能なもの)を渡すだけで済みます。

t = Timer(foo.runAlgorithm)

ドキュメントから:

バージョン2.6で変更:stmtおよびsetupパラメーターは、引数なしで呼び出し可能なオブジェクトも取得できるようになりました。

いくつかの引数を渡す必要がある場合は、次のように関数curryingを使用できますfunctools.partial

class C:
    def printargs(self, a, b):
        print a, b

from functools import partial
foo = C()
t = Timer(partial(foo.printargs, 1, 2))
于 2010-10-18T15:55:47.647 に答える
2

ドキュメントの例が示すように、setupステートメントを渡す必要があります。

t = Timer("foo.runAlgorithm()", 'from __main__ import foo')
于 2010-10-18T15:53:24.433 に答える