Проблема времени Python - PullRequest
       2

Проблема времени Python

6 голосов
/ 18 октября 2010

Я пытаюсь использовать модуль timeit, но не знаю как. У меня есть основной:

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

и у моего класса Foo есть метод, названный runAlgorithm ()

ошибка такова:

NameError: глобальное имя 'foo' не определено

Что я делаю не так? Могу ли я взять время из метода класса?

Ответы [ 2 ]

16 голосов
/ 18 октября 2010

Вместо использования необходимого setup параметра для настройки среды timeit, вы можете просто передать метод (или все, что можно вызвать):

t = Timer(foo.runAlgorithm)

Издокументация:

Изменено в версии 2.6: параметры stmt и setup теперь могут также принимать объекты, которые можно вызывать без аргументов.

Если вам нужно передать некоторые аргументы, выможно использовать функцию каррирования с 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))
2 голосов
/ 18 октября 2010

как пример документов показывает, что вам нужно передать setup операторы:

t = Timer("foo.runAlgorithm()", 'from __main__ import foo')
...