How to pass in argument to timeit.Timer

S

silverburgh.meryl

Hi,

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:

File "/usr/lib/python2.4/timeit.py", line 161, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
NameError: global name 'line' is not defined

Thank you.
 
G

Gabriel Genellina

En Sat, 28 Apr 2007 15:48:11 -0300, (e-mail address removed)
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))

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.
 
S

silverburgh.meryl

En Sat, 28 Apr 2007 15:48:11 -0300, (e-mail address removed)




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.
 
S

silverburgh.meryl

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.

I think I solve the problem by putting a number in timeit() function.
thank you.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,812
Latest member
GracielaWa

Latest Threads

Top