Passing function objects to timeit

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sun Mar 30 00:28:19 EDT 2008


On Sun, 30 Mar 2008 00:27:45 -0300, Gabriel Genellina wrote:

> En Sat, 29 Mar 2008 23:23:07 -0300, Steven D'Aprano
> <steve at REMOVE-THIS-cybersource.com.au> escribió:
> 
>> The general problem is that I wish to time an arbitrary function with
>> arbitrary arguments. The function and arguments are provided to me as
>> Python objects, but timeit requires strings. Converting the objects to
>> strings is not practical, and the objects might not exist in the
>> __main__ module.
> 
> Ah, ok, I understand now. I think this is more-or-less what you want:

[snip]

No, sorry, it's still sharing state.


from timeit import Timer

# Slight modification to the function to return the Timer object.
def timeanyfunc(fn, *args, **kw):
    global wrapped_fn
    def wrapped_fn():
        return fn(*args, **kw)
    return Timer("wrapped_fn()", "from %s import wrapped_fn" % __name__)

def functionA():
    print "Function A"

def functionB():
    print "Function B"

T1 = timeanyfunc(functionA)
T2 = timeanyfunc(functionB)

T1.repeat(3, 1)  # Should print "Function A".
T2.repeat(3, 1)  # Should print "Function B".



-- 
Steven



More information about the Python-list mailing list