I'm trying to use the timeit module but I don't know how. I have a main:
from Foo import Foo
if __name__ == '__main__':
...
foo = Foo(arg1, arg2)
t = Timer("foo.runAlgorithm()")
print t.timeit(2)
and my Class Foo has a method named as runAlgorithm()
the error is this:
NameError: global name 'foo' is not defined
What am I doing wrong? Can I take the time from a class method?
Instead of using the necessary setup
parameter for setting up the timeit environment, you can simply pass the method (or anything that is callable):
t = Timer(foo.runAlgorithm)
From the documentation:
Changed in version 2.6: The stmt and setup parameters can now also take objects that are callable without arguments.
If you need to pass some arguments, you can use function currying with functools.partial
, for example:
class C:
def printargs(self, a, b):
print a, b
from functools import partial
foo = C()
t = Timer(partial(foo.printargs, 1, 2))
as docs example show you need to pass setup
statements:
t = Timer("foo.runAlgorithm()", 'from __main__ import foo')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With