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

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

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

и мой класс Foo имеет метод с именем runAlgorithm()

ошибка вот в чем:

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

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


person Federico Lenzi    schedule 18.10.2010    source источник


Ответы (2)


Вместо использования необходимого 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))
person AndiDog    schedule 18.10.2010
comment
Я думаю, что без аргументов нужно выделить - person SilentGhost; 18.10.2010
comment
Что ж, если вам нужно передать аргументы, вы можете просто использовать небольшую функцию-оболочку. - person Gintautas Miliauskas; 18.10.2010
comment
@SilentGhost: отредактировано, чтобы включить пример с аргументами. - person AndiDog; 18.10.2010

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

t = Timer("foo.runAlgorithm()", 'from __main__ import foo')
person SilentGhost    schedule 18.10.2010