Method much slower than function?
Steven D'Aprano
steve at REMOVE.THIS.cybersource.com.au
Thu Jun 14 13:17:25 EDT 2007
On Thu, 14 Jun 2007 00:40:12 +0000, idoerg wrote:
>>>> cProfile.run("bar.readgenome(open('cb_foo'))")
> 20004 function calls in 10.214 CPU seconds
This calls the method on the CLASS, instead of an instance. When I try it,
I get this:
TypeError: unbound method readgenome() must be called with bar instance as
first argument (got file instance instead)
So you're running something subtly different than what you think you're
running. Maybe you assigned bar = bar() at some point?
However, having said that, the speed difference does seem to be real: even
when I correct the above issue, I get a large time difference using
either cProfile.run() or profile.run(), and timeit agrees:
>>> f = bar().readgenome
>>> timeit.Timer("f(open('cb_foo'))", "from __main__ import f").timeit(5)
18.515995025634766
>>> timeit.Timer("readgenome(open('cb_foo'))", "from __main__ import readgenome").timeit(5)
0.1940619945526123
That's a difference of two orders of magnitude, and I can't see why.
--
Steven.
More information about the Python-list
mailing list