timing a function with timeit? (newbie problem)

Chad Netzer cnetzer at sonic.net
Wed Aug 27 21:24:15 EDT 2003


On Wed, 2003-08-27 at 16:45, news.west.cox.net wrote:
> Why do I get the exception "global name 'test' is not defined" in this code
> (next to last line) and how do I fix it?
> 
> import timeit
> def test():
>    x=2+2
> t = timeit.Timer('test()')
> print t.timeit()

You need to tell it about test() with the setup argument (by either
defining it directly, or importing it.

>>> t = timeit.Timer('test()', 'def test(): x = 2+2')
>>> t.timeit()
0.61572694778442383

>>> t = timeit.Timer('test()', 'from __main__ import test')
>>> t.timeit()
0.71046602725982666

This is because globals are at the module scope.  The timeit module is
separate from the interactive (ie. '__main__') namespace.  The Timer
function compiles your code in the namespace where it is defined, not
where it is called.  So, it's 'globals' are the globals in the timeit
module, and thus, it cannot see your test() function as a global.

-- 

Chad Netzer






More information about the Python-list mailing list