How to pass in argument to timeit.Timer

silverburgh.meryl at gmail.com silverburgh.meryl at gmail.com
Mon Apr 30 14:24:51 EDT 2007


On Apr 28, 3:37 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Sat, 28 Apr 2007 15:48:11 -0300, silverburgh.me... at gmail.com
> <silverburgh.me... at gmail.com> escribió:
>
> > I have a function in my python like this:
> > def callFunc(line, no):
> >       # some code
>
> > And I want to do a performance test like this:
> >  for line in f:
> >         for i in range(int(count)):
> >             t1 = timeit.Timer("callFunc(line, i)","from __main__
> > import callFunc")
> >             r1 = t1.timeit();
> >             print r1;
>
> > but when I run it, it can't recognize the parameter 'line' and 'i',
> > can you please tell me how to fix it? i get this error:
>
> They go in the "setup" parameter, like this:
>
>      t1 = timeit.Timer("callFunc(line, i)","from __main__ import callFunc;
> line=%r; i=%d" % (line, i))
>

Thanks I try it:

def stressTest():
    for line in f:
        for i in range(int(count)):
            print i;
            t1 = timeit.Timer("callFunc(line, i)","from __main__
import callFunc; line=%r; i=%d" % (line, i))
            r1 = t1.timeit();
            times.append(r1);
            print r1;

But it keeps calling callFunc() and it never returns from my loop. The
value of 'count' is 2.

Thank you.


> If it gets much longer, try this:
>
> setup = """
>  from __main__ import callFunc
> line = %r
> i = %d""" % (line, i)
> stmt = "callFunc(line, i)"
> t1 = timeit.Timer(stmt, setup)
>
> --
> Gabriel Genellina
>
> PS: Please leave out the final ; - this is Python, not C nor ...
> PS2: Perhaps the only place where I've used ; is with timeit. And even
> then you can avoid them as in the last example.





More information about the Python-list mailing list